#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. Спасибо, Алек и Фредерик.. Решение действительно сработало, и я благодарен за это. Однако был более эффективный ответ, который я принял. Спасибо за вашу помощь!!