У меня есть список списков, как показано ниже. а = [[1,2,3], [2,3,4], [3,4,5]]

У меня также есть отдельный список имен names = ['Ann', 'john', 'smith']

Теперь я хочу записать это в CSV-файл, как показано ниже

1st row: Ann,1,2,3
2nd row: john,2,3,4
3rd row: smith,3,4,5

Я в настоящее время использую;

with open(output_file, 'w') as f:
        writer = csv.writer(f)
        writer.writerows(a)

Тем не менее, он не выполняет работу, которую я хочу, так как он всегда начинается с первого столбца, а не второго столбца. Пожалуйста, помогите мне.

1
user8510273 30 Авг 2017 в 04:22

3 ответа

Лучший ответ
with open(output_file, 'w') as f:
   f.write('\n'.join([elem[0]+','+str(elem[1]).strip('[').strip(']') for elem in zip(names,a)]))

Попробуй это.

0
whackamadoodle3000 30 Авг 2017 в 01:28

Здесь важно понять, что вы хотите обрабатывать список параллельно . Это легко сделать с помощью встроенной функции zip. Он принимает список итерируемых элементов и возвращает n -й элемент каждого итерируемого в виде кортежа. Затем вы можете отформатировать строки, используя str.format:

names = ['Ann', 'john', 'smith']
sublists = [[1,2,3], [2,3,4], [3,4,5]]

with open(output_file, 'w') as file:
    for name, sublist in zip(names, sublists):
        row = '{},{},{},{}'.format(name, *sublist)
        file.write(row)

Обратите внимание, что если ваши списки имеют разные размеры, вы можете захотеть использовать itertools.zip_longest.

1
Christian Dean 30 Авг 2017 в 01:53
with open("output_file", 'w') as f:
    f.write("\n".join([','.join(map(str, [name] + extra)) for name, extra in zip(name, extras)])
0
stamaimer 30 Авг 2017 в 02:01