Преобразование текстового файла в файл 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

Вопросы

  1. How do you convert this text file to a comma delimited csv file?

  2. 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})
Вернуться на верх