Список в csv, разделенный запятой и новой строкой python

#python

#python

Вопрос:

У меня есть список, который я хочу записать в файл CSV, и я хочу, чтобы он был разделен запятой, за которой следует новая строка. Я пробовал writerows, но это разбивает все символы. Я пробовал writerow, но это дает мне все в одной строке, разделенной запятой, но без новой строки для каждой записи.

Моя попытка

 import  csv

mylist = ['AFCIEUR ID', 'CSCIB25 LX' , 'GAMCOIE ID']

writer = open("my_EQ_IDs.csv", 'w ')
writer_out = csv.writer(writer,delimiter='n')
fields = ['SYMBOL']
writer_out.writerow(fields)
writer_out.writerows(mylist)
 

Это дает мне

 SYMBOL

A
F
C
I
E
U
R
 
I
D

C
S
C
I
B
2
5
 
L
X

G
A
M
C
O
I
E
 
I
D
 

Если я использую writerow вместо writerows , я получаю следующее

 SYMBOL

AFCIEUR ID
CSCIB25 LX
GAMCOIE ID
 

Это близко к тому, что я хочу, но не разделено запятой, как мне нужно. Я попытался добавить разделитель as delimiter=',n' , но это выдает ошибку TypeError: "delimiter" must be a 1-character string

Мне нужен (ожидаемый результат)

 SYMBOL

AFCIEUR ID,
CSCIB25 LX,
GAMCOIE ID
 

Может кто-нибудь сказать мне, что я делаю не так, и указать мне правильное направление?

Очень признателен!

Комментарии:

1. Можете ли вы использовать запятую в разделителе? разделитель=’,n’

2. Я попробовал это, и вы получаете ошибку TypeError: "delimiter" must be a 1-character string

Ответ №1:

Фактический результат вызван тем, что строка является итерируемой. Вы передаете список строк, для writerows которых ожидается итерация итераций. Таким образом, каждый символ значений принимается как поле, за которым следует разделитель полей, который вы установили на новую строку.

Но ожидаемый файл не является допустимым файлом csv. Вы используете последовательность ',n' (2 символа) в качестве разделителя, когда модуль Python csv определяет разделитель только как один символ. Таким образом, вы не можете ожидать, что модуль csv выдаст ожидаемый результат…

Это означает, что вы должны написать свой файл вручную. Это легко использовать join :

 with open("my_EQ_IDs.csv", 'w ') as writer:
    print('SYMBOL', file=writer)
    print(',n'.join(mylist), file=writer)
 

Комментарии:

1. Большое вам спасибо @Serge Ballesta! Вы предоставили решение, а также преподавание, о join котором я сейчас расскажу.

Ответ №2:

попробуйте включить запятую в разделитель: delimiter=',n'

Комментарии:

1. Я попробовал это, и вы получаете ошибку TypeError: "delimiter" must be a 1-character string

Ответ №3:

Попробуйте использовать lineterminator=’n’ и delimiter=’,’ — должно сработать.

Комментарии:

1. Это работает не так, как ожидалось, он печатает SYMBOL AFCIEUR ID,CSCIB25 LX,GAMCOIE ID

Ответ №4:

Самый простой способ, о котором я могу думать, это:

 mylist = ['AFCIEUR ID', 'CSCIB25 LX' , 'GAMCOIE ID']
with open('my_output_file.csv','w') as f:
    for item in mylist:
        f.write(f'{item},n')
 

Комментарии:

1. Вы могли бы использовать f.write(«,n».join(myList)), чтобы избежать конечной запятой

2. Спасибо, Алек и Фредерик.. Решение действительно сработало, и я благодарен за это. Однако был более эффективный ответ, который я принял. Спасибо за вашу помощь!!