Запись в CSV-файл из списка - PullRequest
0 голосов
/ 26 июня 2018

Я пишу класс, который должен написать CSV-файл с разделителем ','

class DelFile(WriteFile):
    def __init__(self, TextFile):
        self.TextFile = TextFile

    def write(self, Mssg, Delimiter):
        with open(self.TextFile, "w+") as csv_file:
            writer = csv.writer(csv_file, delimiter=',')
            for item in Mssg:
                writer.writerow(item)

Я звоню здесь:

c = DelFile('text3.csv')
c.write(['a','b','c'], ',')

В результате я получаю это:

enter image description here

Я хотел бы записать содержимое в виде строк, а не в виде столбцов a, b, c. Кроме того, я не понял, почему в результате возникают скачки строк. Любая помощь высоко ценится!

1 Ответ

0 голосов
/ 27 июня 2018

Как уже упоминалось, в Python 3.x при работе с объектами csv.writer() файлы должны открываться с аргументом newline=''. Во-вторых, вы передаете целую строку в функцию write(), а writerow() занимает целую строку, нет необходимости разбивать ее на отдельные значения с помощью цикла for. Как вы видели, это результаты в каждом значении должны быть записаны в отдельной строке. Вместо этого просто напишите всю строку следующим образом:

import csv

class DelFile():
    def __init__(self, TextFile):
        self.TextFile = TextFile

    def write(self, row, delimiter):
        with open(self.TextFile, 'w+', newline='') as csv_file:
            writer = csv.writer(csv_file, delimiter=delimiter)
            writer.writerow(row)

c = DelFile('text3.csv')
c.write(['a','b','c'], ',')

Это даст вам text3.csv, содержащий:

a,b,c

Примечание. Этот подход очень неэффективен, поскольку вы эффективно открываете и добавляете файл для каждой строки. Это может быть хорошо, если вы пишете только несколько строк, но, возможно, лучшим подходом будет оставить файл открытым, пока класс не будет удален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...