Python парсинг CSV-файла - заменить запятые на двоеточия
Я подозреваю, что это обычная проблема, но я не могу найти ответ. Я пытаюсь удалить все запятые из файла 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 ответа
Ответ проще, чем вы думаете. Вам просто нужно установить разделитель для 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
,
Если вы хотите прочитать csv с разделителем-запятой и записать его в другой файл с разделителями-запятыми. Я думаю, что более простой способ будет:
reader = csv.reader(open("input.csv", "rU"), delimiter=',')
writer = csv.writer(open("output.csv", 'w'), delimiter=';')
writer.writerows(reader)
Я считаю, что этот пример гораздо легче понять, чем с with open(...)
, Также, если вы работаете с файлом, используя запятую и точку с запятой в качестве разделителей. Вы можете использовать Sniffer файла CSV, чтобы определить, какой разделитель используется перед чтением файла (пример в ссылке).
Также, если вы хотите переписать в том же файле, проверьте этот ответ stackru.
Я построю свой ответ на ответе @Sylhare. В python3 режим 'U' устарел. Итак, у меня сработало следующее решение:
import csv
reader = csv.reader(open("input.csv", newline=None), delimiter=',')
writer = csv.writer(open("output.csv", 'w'), delimiter=':')
writer.writerows(reader)
Я пишу файлы csv из необработанных данных JSON и заметил, что DictWriter
модуль также поддерживает различные разделители. Пример:
with open('file_1.csv', 'w', encoding="utf-8-sig", newline = '') as myfile:
wr = csv.DictWriter(myfile, fieldnames = table_fields, delimiter=';')
wr.writeheader()
wr.writerows(# my data #)
Предполагая, что CSV разделен запятыми, и вы хотите заменить запятые в каждой записи, я думаю, что проблема заменяет неправильный элемент:
for rows in reader:
for parsed_item in rows:
parsed_item = parsed_item.replace(',', ':') # Change rows to parsed_item
writer.writerow(parsed_item)
Если вы просто заменяете запятые двоеточиями, вам вообще не нужно использовать 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 не должно быть запятых.