Список в csv, разделенный запятой и новой строкой 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

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

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

SYMBOL

AFCIEUR ID,
CSCIB25 LX,
GAMCOIE ID

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

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

Можно ли использовать запятую в разделителе? разделитель=',\n'

Frederik Højlund 15.12.2020 14:12

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

PMac 15.12.2020 14:25
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
1 391
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

PMac 15.12.2020 14:13

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

Это не работает должным образом, оно печатает SYMBOL AFCIEUR ID,CSCIB25 LX,GAMCOIE ID

PMac 15.12.2020 14:20

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

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')

Вы можете использовать f.write(",\n".join(myList)) чтобы избежать запятой

Frederik Højlund 15.12.2020 14:18

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

PMac 15.12.2020 14:31
Ответ принят как подходящий

Фактический результат вызван тем, что строка является итерируемой. Вы передаете список строк в 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)

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

PMac 15.12.2020 14:28

Другие вопросы по теме