Python анализировать CSV-файл - заменить запятые на двоеточия - PullRequest
9 голосов
/ 09 июля 2011

Я подозреваю, что это обычная проблема, но я не могу найти ответ.Я пытаюсь удалить все запятые из файла CSV и заменить их двоеточиями.Я бы обычно использовал sed или vi для этого, но мне нужно использовать чисто Python-реализацию.Вот что я придумала до сих пор:

import csv

with open("temp.csv", mode="rU") as infile:
    reader = csv.reader(infile, dialect="excel")    
    with open("temp2.txt", mode="w") as outfile:
        writer = csv.writer(outfile)
        for rows in reader:
            for parsed_item in rows:
                parsed_item = rows.replace(',', ':') # I can't do this with a list!
                writer.writerow(parsed_item)

Может кто-нибудь помочь мне с этим?Заранее спасибо за помощь.

Ответы [ 4 ]

20 голосов
/ 09 июля 2011

Ответ проще, чем вы думаете.Вам просто нужно установить разделитель для csv.writer:

import csv

row = #your data

with open("temp.csv", mode="rU") as infile:
    reader = csv.reader(infile, dialect="excel")    
    with open("temp2.txt", mode="w") as outfile:
        writer = csv.writer(outfile, delimiter=':')
        writer.writerows(rows)

Вы пытаетесь заменить , на :, и вы не собираетесь ничего делать, потому что строка уже была обработанаcsv.reader.

5 голосов
/ 21 марта 2018

Если вы хотите прочитать csv с разделителем-запятой и записать его в другой файл с разделителями-запятыми.Я думаю, что более простым способом было бы:

reader = csv.reader(open("input.csv", "rU"), delimiter=',')
writer = csv.writer(open("output.csv", 'w'), delimiter=';')
writer.writerows(reader)

Я считаю, что этот пример гораздо легче понять, чем с with open(...).Также, если вы работаете с файлом, используя запятую и точку с запятой в качестве разделителей.Вы можете использовать Sniffer файла csv, чтобы определить, какой разделитель используется перед чтением файла (пример в ссылке).

Также, если вы хотите переписать в том же файле, проверьтеэтот ответ stackoverflow .

0 голосов
/ 09 июля 2011

Предполагая, что CSV разделен запятыми, и вы хотите заменить запятые в каждой записи, я думаю, что проблема заменяет неправильный элемент:

for rows in reader:
    for parsed_item in rows:
        parsed_item = parsed_item.replace(',', ':') # Change rows to parsed_item
        writer.writerow(parsed_item)
0 голосов
/ 09 июля 2011

Если вы просто заменяете запятые двоеточиями, вам вообще не нужно использовать csv-парсер.

with open("file.csv", 'r') as f:
    with open("temp.csv", 'w') as t:
        for lines in f:
            new_line = line.replace(",",":")
            t.write(new_line)

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

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