Преобразование текстового файла в файл csv с разделителями-запятыми или файл json
У меня есть текстовый файл, который я хочу преобразовать в CSV-файл с разделителями-запятыми, где первая строка (заголовки) - это поля таблицы MySQL. Мой текстовый файл выглядит следующим образом
id purchase-date last-updated-date status
305-0847312-2761164 2022-04-11T22:23:27+00:00 2022-04-11T22:23:31+00:00 Pending
028-3270261-2897162 2022-04-11T22:17:27+00:00 2022-04-11T22:17:30+00:00 Pending
028-8245400-1649940 2022-04-11T22:15:29+00:00 2022-04-11T22:15:32+00:00 Pending
028-2661715-2120359 2022-04-11T21:57:24+00:00 2022-04-11T21:57:28+00:00 Pending
303-9076983-4225163 2022-04-11T21:53:52+00:00 2022-04-11T21:53:55+00:00 Pending
304-7440363-0208337 2022-04-11T21:49:14+00:00 2022-04-11T21:49:17+00:00 Pending
302-2070657-8345128 2022-04-11T21:30:12+00:00 2022-04-12T01:32:20+00:00 Shipped
Что я хочу получить, так это файл следующего вида
id, purchase-date, last-updated-date, status
305-0847312-2761164, 2022-04-11T22:23:27+00:00, 2022-04-11T22:23:31+00:00, Pending
028-3270261-2897162, 2022-04-11T22:17:27+00:00, 2022-04-11T22:17:30+00:00, Pending
Мне нужно этот файл сохранить в базе данных, где первая строка - это названия столбцов
Я попробовал pandas
read_file = pd.read_csv("reports/report.txt")
read_file.to_csv("reports/report.csv", index=None, sep="\n")
exit()
Вот я получил ошибку
pandas.errors.ParserError: Error tokenizing data. C error: Expected 2 fields in line 194, saw 4
Вопросы
How do you convert this text file to a comma delimited csv file?
Or a more preferable way, to convert this txt file to json file, saving this to db is much easier if its in json format, something like:
[ { id: 305-0847312-2761164, purchase_date: 2022-04-11T22:23:27+00:00 }, { id: 305-0847312-2761165, purchase_date: 2022-05-11T22:23:27+00:00 }, ....................... ] with open(file) as f: for i in f: myTable.objects.create(id=id,**i)
При условии, что заголовки и данные колонок содержат без пробельных символов, а колонки разделены пробелами, минимальный пример на чистом Python может быть следующим:
import csv
with open('data.txt', 'r') as f:
data = f.read()
# Remove trailing whitespace and split by whitespace
lines = [line.strip() for line in data.splitlines()]
lines = [line.split() for line in lines]
# Use built-in csv module to handle escape chars etc
with open('data.csv', 'w', newline='') as f:
writer = csv.writer(f)
for line in lines:
writer.writerow(line)
Для получения дополнительной информации смотрите документацию CSV Writer.
Я решил эту проблему с помощью разделителя и с помощью pandas
with open(f"{path}/report.txt", "w+") as output:
output.write(res.payload.get("document")) // from amazon api
in_txt = csv.reader(open(f"{path}/report.txt", "r"), delimiter="\t")
out_csv = csv.writer(open(f"{path}/report.csv", "w"))
out_csv.writerows(in_txt)
text = f"{path}/report.csv"
df = pd.read_csv(text)
# df.fillna("", inplace=True)
row_iter = df.iterrows()
for index, row in row_iter:
Mytable.objects.update_or_create(id=id, defaults={**row})