Разобрать и разбить файл .txt и экспортировать его в строки .csv, используя Python - PullRequest
2 голосов
/ 14 марта 2019

У меня большой текстовый файл с заметками, которые я хотел бы разделить и разделить на отдельные строки с помощью Python.Я получил несколько работать, но он добавляет одну букву на ячейку в файле .csv, а не весь раздел.Я вставил @@@ символы, чтобы указать, где каждый раздел должен быть разделен.Например, вот как выглядит мой файл .txt:

@@@ jlkdlkjdlkjdalkjdalk @@@ 78278947298729874298742 @@@ llkdlaklkdalkdsa
@@@ nmczxmnczxmncz

В конечном итоге я хочу, чтобы он был экспортирован в .csv, чтобы он выглядел так:

ID | Reporttext

1  | jlkdlkjdlkjdalkjdalk 
2  | 78278947298729874298742 
3  | llkdlaklkdalkdsa
4  | nmczxmnczxmncz

Сейчас он экспортируетсякак это: jlkdlk (и так далее).

Вот мой код:

import re, csv с открытым ("thetext.txt") как f: для строки в f: для слова в line.split ("@@@"): с открытым (r'theoutput.csv ',' a ') как g: writer = csv.writer (g) writer.writerow (слово) print (слово)

Так что, повторюсь, моя проблемаизбегая расстояния (например, это), когда он экспортирует.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 14 марта 2019

Вы можете делать зачистку и разбиение на @, как,

$ cat txt2csv.py 
import csv

with open('some.txt') as file_, open('some_new.csv', 'w') as csvfile:
    lines = [x for x in file_.read().strip().split('@') if x]
    writer = csv.writer(csvfile, delimiter='|')
    writer.writerow(('ID', 'Reporttext'))
    for idx, line in enumerate(lines, 1):
        writer.writerow((idx, line.strip('@')))

И входной файл,

$ cat some.txt 
@@@ jlkdlkjdlkjdalkjdalk @@@ 78278947298729874298742 @ llkdlaklkdalkdsa @@@ nmczxmnczxmncz

И выходной файл,

$ cat some_new.csv 
ID|Reporttext
1| jlkdlkjdlkjdalkjdalk 
2| 78278947298729874298742 
3| llkdlaklkdalkdsa 
4| nmczxmnczxmncz
1 голос
/ 14 марта 2019

Подобно ответу Хана Соло, вы можете читать и разбивать строку следующим образом:

import csv

with open("thetext.txt") as txt, open('theoutput.csv', 'a') as csvfile:
  writer = csv.writer(csvfile, delimiter=';')

  writer.writerow(('ID', 'Reporttext'))
  id = 1
  for line in txt:
    words = line.strip().split("@@@")

      for word in words:
        writer.writerow((id, word.strip()))
        id += 1

Таким образом, вы читаете ваш текстовый файл построчно, а затем разбиваете его на @@@ перед записью их слово в слово в ваш файл CSV.Вы даже можете удалить ведущий @@@ во входном файле.

1 голос
/ 14 марта 2019

Сначала вы должны открыть оба файла одним

with open("thetext.txt") as f, open(r'theoutput.csv', 'a') as g:
import csv
with open("thetext.txt") as f, open('theoutput.csv', 'a') as g:
    lines = [x for x in f.read().strip().split('@') if x]
    writer = csv.writer(g, delimiter='|')
    writer.writerow(('ID', 'Reporttext'))
    for lineNumber, line in enumerate(lines, 1):
        writer.writerow((lineNumber, line.strip('@')))

Также вы должны использовать

lines = f.readlines()

Потому что то, что происходит сейчас, заключается в том, что python рассматривает текстовый файл как большую строку

...