Python: установите разделитель как запятую, так и пробел ',' - PullRequest
0 голосов
/ 06 августа 2020

Я хочу добавить в свой CSV-файл новую строку. Но новая строка должна быть разделена запятой, а также пробелом между ними. Я могу разделить их только запятой или пробелом.

Текущий файл:

data.csv

1,abc1,xyz1
2,abc2,xyz2
3,abc3,xyz3
4,abc4,xyz4
5,abc5,xyz5

Я хочу его как :

data.csv

1, abc1, xyz1
2, abc2, xyz2
3, abc3, xyz3
4, abc4, xyz4
5, abc5, xyz5

Мой код для записи CSV:

my_new_row = [6, 'abc6', 'xyz6']
with open('data.csv', 'a', newline='') as filehandle:
    writer = csv.writer(filehandle, delimiter=',')
    writer.writerow(my_new_row)

Ответы [ 5 ]

0 голосов
/ 06 августа 2020

Вот простой способ обхода:

import csv

class CSV_Translater(object):
    """ Output file-like object that translates characters. """
    def __init__(self, f, old, new):
        self.f = f
        self.old = old
        self.new = new
    def write(self, s):
        self.f.write(s.replace(self.old, self.new))
    def close(self):
        self.f.close()
    def flush(self):
        self.f.flush()

my_new_row = ['6', 'abc6', 'xyz6']


with open('data.csv', "r+") as filehandle:
    reader = csv.reader(filehandle)
    with open('out_test.csv', "w") as opfile:
        translater = CSV_Translater(opfile, ',', ', ')
        writer = csv.writer(translater, delimiter=',')
        for row in reader:
            writer.writerow(row)
        writer.writerow(my_new_row)

Sample File output Screenshots 1

0 голосов
/ 06 августа 2020

Формат файла AS CVS означает "," значения, разделенные запятыми, я предполагаю, что теперь вам больше не нужен выходной файл CSV, а скорее простой текстовый выходной файл.

Код ниже даст желаемый результат

def readAndWriteFile(read_file_path,write_file_path):
    with open(read_file_path,"r") as fin:
        output = [", ".join(element.split(',')) for element in fin.readlines()]
    print("output:",output)
    
    with open(write_file_path,'w') as fout:
        fout.writelines(output)
0 голосов
/ 06 августа 2020

Формат, который вы хотите напечатать, не похож на стандартный формат CSV. Таким образом, вы можете написать свой собственный писатель для печати этого строкового формата.

Общий формат и тип MIME для файлов с разделителями-запятыми (CSV)

0 голосов
/ 06 августа 2020

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

import csv

my_new_row = [6, 'abc6', 'xyz6']
x, y = ',', ', '

with open('data.csv', 'r', newline='') as original_file:
    original_reader = csv.reader(original_file)
    with open('new_file.csv', 'w', newline='') as new_file:
        new_writer = csv.writer(new_file, delimiter=',')
        for line in original_reader:
            new_writer.writerow(line)
        with open('temp_file.csv', 'w+', newline='') as temp_file:
            temp_reader = csv.reader(temp_file)
            temp_writer = csv.writer(temp_file, delimiter=',')
            temp_writer.writerow(my_new_row)
            temp_file.seek(0)
            data = temp_file.read()
            temp_file.seek(0)
            temp_file.write(data.replace(x, y))
            temp_file.seek(0)
            for line in temp_reader:
                new_writer.writerow(line)

Все выходные данные записываются в new_file.csv

0 голосов
/ 06 августа 2020

Не лучшее решение, но, исходя из ваших требований, я могу придумать одно решение:

import csv
my_new_row = [6, 'abc6', 'xyz6']
with open('data.csv', 'a') as filehandle:
    writer = csv.writer(filehandle, delimiter=',')
    writer.writerow([' ' + str(i) if isinstance(i, str) else i for i in my_new_row])

O / P: 6, abc6, xyz6

Попробуйте это и дайте мне знать если это поможет.

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