csv.writer открывает новую пустую строку, даже с новой строкой =»

#python #csv

#python #csv

Вопрос:

Я пытаюсь написать код, который получает список строк и записывает csv-файл, содержащий все эти строки в одной строке. вот что я получил до сих пор-

 import csv
l = ['column1', 'column2',....]
with open('csvfile', 'w', newline='') as f:
    writer = csv.writer(f, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)
    for x in range(1):
        writer.writerow(l)
  

Я хочу, чтобы файл выглядел так:

 column1 column2,...
  

но по какой-то причине это выглядит так:

 column1 column2,...<n>
  

Я использую Windows и python 3.6.7.
Заранее спасибо!

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

1. Файл CSV содержит данные в строках. Это означает, что в конце каждой записи есть новая строка. Вы бы хотели, чтобы CSV-файл с двумя записями выглядел так?

2. @zvone wdym ? Я понимаю первые два предложения, но у меня есть только одна запись в моем файле.

3. У вас всегда есть только два значения? Почему вы используете CSV writer для этого? Это не CSV.

4. например, значения в запросе. Я должен это изменить — в списке может быть бесконечное количество значений

5. Правильный способ сохранить это в CSV — это иметь один столбец и столько строк, сколько есть значений. В любом случае, я действительно не понимаю, какую проблему вы пытаетесь решить.

Ответ №1:

Вам не нужно использовать csv.writter , вы можете просто сделать это с помощью обработчиков файлов Python. Также не используйте list в качестве имени переменной ключевое слово a в Python.

 list_columns = ['column1', 'column2', 'column3']

f = open('csvfile.csv', 'w')
for item in list_columns:
    f.write(item)
    f.write(' ')
    
f.close()
  

Вывод: column1 column2 column3

Ответ №2:

Если вы хотите использовать csv.writer , вам нужно будет записать в строковый буфер, а затем выполнить некоторое редактирование:

 import csv
from io import StringIO

l = ['column1', 'column2']
out = StringIO('')
writer = csv.writer(out, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)
for x in range(4):
    writer.writerow(l)
# replace newlines with single space and get rid of carriage returns:
rows = out.getvalue().replace('n', ' ').replace('r', '')
# final character is a space. Don't output:
with open('csvfile', 'w') as f:
    f.write(rows[0:-1])