Чтение электронных писем из текстового файла с использованием python - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть TXT-файл с электронными письмами, например:

From r Wed Oct 30 21:41:56 2002
Return ...
...
From r Thu Oct 31 08:11:39 2002
Return ...
...

Я хочу извлечь каждое письмо в массив, например:

["From r Wed Oct 30 21:41:56 2002 Return ...", "From r Thu Oct 31 08:11:39 2002 Return ...", ..., "From r ..."]

Я использую python

 with open(self.file, encoding="utf8", errors='ignore') as data_file:
     lines = ''

     first_line = True

     for line in data_file:
         if line.startswith("From r") and not first_line:
             emails.append(lines)
             lines = ''
          else:
              first_line = False
          lines = lines + line

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

попробуйте это:

emails_list = []
email = ""
with open("full/path/to/file", "r") as f:
    email += f.readline()
    for l in f.readlines():
        l = l.strip()
        if not l.startswith("From r"):
            email += " " + l
        else:
            emails_list.append(email)
            email = l
    else:
        emails_list.append(email)

print(emails_list)
1 голос
/ 11 апреля 2020

Предполагая, что первая строка каждого письма начинается с From r, мы можем l oop над каждой строкой письма, добавляя новую запись в список писем каждый раз, когда видим From r, и конкатенируя каждую строку после этого к «текущему» электронному письму, отслеживаемому по индексу i.

emails = []
with open('emails.txt') as f:
    i = -1
    for line in f:
        if line.startswith('From r'):
            emails.append(line)
            i += 1
        else:
            emails[i] += line

print(emails)

, выводится:

['From r Wed Oct 30 21:41:56 2002\nReturn ...\n...\n', 'From r Thu Oct 31 08:11:39 2002\nReturn ...\n...\n']
...