Python - разбирать, разбивать и разделять текст на отдельные строки - PullRequest
1 голос
/ 15 марта 2019

У меня есть текстовый файл с данными, которые я хотел бы импортировать в базу данных Access. Текстовый файл содержит несколько абзацев, которые я хочу поместить в один ряд. Я разделил место, где я хочу каждую строку, с помощью "@@@"

Итак, вот пример того, что у меня есть:

@@@ Я бы хотел пойти в школу, потому что это так весело. Бла Бла Бла Бла. Мне сегодня так весело. @@@ Я так счастлив без причины. Бла Бла Бла Бла Бла. Мне сегодня так весело.

Я бы хотел, чтобы это выглядело так:

ID | Reporttext

1 | Я хотел бы пойти в школу, потому что это так весело. Бла бла Бла бла. Мне сегодня так весело.

2 | Я так счастлив без причины. Бла Бла Бла Бла Бла. я сегодня так весело.

Тем не менее, я знаю, что я близок с моим кодом, но я получаю это:

ID | Reporttext

1 | Я хотел бы пойти в школу, потому что это так весело. Бла бла Бла Бла.

2 | Мне сегодня так весело.

3 | Я так счастлив без причины. Бла Бла Бла Бла Бла. я имея столько

4 | Мне сегодня так весело.

Я пытался использовать оператор IF, чтобы добавить идентификатор, только если в строке было "@@@", но я не смог заставить его работать. Хотя, если бы я это сделал, я думаю, это должно сработать. У меня есть ID и reporttext, используя точку с запятой для разделителя.

Вот мой код:

import csv

with open("by2.txt") as txt, open('theoutput2.txt', '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

1 Ответ

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

Вы можете комбинировать split("@@@") и enumerate(iterable,start_index) в сочетании с выражением генератора:

t = """@@@ I would like to go to school because it's so much fun. Blah Blah Blah Blah. I am having so much fun today. @@@ I am so happy for no reason. Blah Blah Blah Blah Blah. I am having so much fun today."""

# split and enumerate(starting at 1)
# the if conditional inside the generator expression eleminates empty lines  
data = list(enumerate( (x.strip() for x in t.split("@@@") if x.strip()), 1))

print(data)
print("")

import csv
with open("t.txt", "w", newline = "") as csvfile:
    writer = csv.writer(csvfile, delimiter=';')
    writer.writerow(('ID', 'Reporttext'))
    writer.writerows(data)

print( open("t.txt").read())

Выход:

# data
[(1, "I would like to go to school because it's so much fun. Blah Blah Blah Blah. I am having so much fun today."), 
 (2, 'I am so happy for no reason. Blah Blah Blah Blah Blah. I am having so much fun today.')]


# file
ID;Reporttext
1;I would like to go to school because it's so much fun. Blah Blah Blah Blah. I am having so much fun today.
2;I am so happy for no reason. Blah Blah Blah Blah Blah. I am having so much fun today.

Доку:

...