我每天都收到一封电子邮件,除了部分数据不同外,电子邮件的格式始终相同。我写了一个VBA宏,将电子邮件导出到文本文件。现在它是一个文本文件,我想解析数据,以便我只获得新信息。
电子邮件的格式是这样的
> Irrelevant data
> Irrelevant data
> Type: YUK
> Status: OPEN
> Date: 6/22/2015
> Description: ----
>
> Description blah blah blah
> Thank you
我想捕获相关数据。例如,在这种情况下,我想只捕获YUK,OPEN,2015年6月22日和描述等等等等。我尝试使用csv模块逐行扫描并打印出行但我似乎无法找到解析该信息的方法。
这是我到目前为止所拥有的。它只打印出线条。
import os
import glob
import csv
path = "emailtxt/"
glob = max(glob.iglob(path + '*.txt'), key=os.path.getctime)#most recent file located in the emailtxt
newestFile = os.path.basename(glob)#removes the emailtxt\ from its name
f = open(path+newestFile)
read = csv.reader(f)
for row in read:
print row
f.close()
我如何解析文本文件?
答案 0 :(得分:1)
我在这里并不瘦,你根本不需要csv
模块,只需要定期的文件I / O就能为你做到你想做的事,即;逐行读取文件,并从每一行中提取您需要的数据并将其存储在list
中,例如:
import os
import glob
path = "emailtxt/"
glob = max(glob.iglob(path + '*.txt'), key=os.path.getctime)#most recent file located in the emailtxt
newestFile = os.path.basename(glob) #removes the emailtxt\ from its name
capture_list = [] #list to hold captured words
with open(path+newestFile, 'r') as f: #open the file for reading
for line in f: #Go line by line
capture_list.append(line.split()[2]) #add to the list last word
答案 1 :(得分:1)
如果能够单独打印出行,解析它们就是分开行(表示为字符串)的问题。假设在每个项描述符之后有一些空格,或者在每个描述符之后有一个冒号,你可以使用它来解析冒号和空格之后的任何内容。看到python字符串common operations能够在有用的点分割行。
在实际解析数据方面,您可以执行一系列if语句来捕获每个状态或文件类型。对于日期,请尝试使用time.strptime函数来评估datetime对象的日期。您所要做的就是匹配日期的格式,在您的情况下,似乎是“%m /%d /%y”。
答案 2 :(得分:1)
如何使用正则表达式
def get_info(string_to_search):
res_dict = {}
import re
find_type = re.compile("Type:[\s]*[\w]*")
res = find_type.search(string_to_search)
res_dict["Type"] = res.group(0).split(":")[1].strip()
find_Status = re.compile("Status:[\s]*[\w]*")
res = find_Status.search(string_to_search)
res_dict["Status"] = res.group(0).split(":")[1].strip()
find_date = re.compile("Date:[\s]*[/0-9]*")
res = find_date.search(string_to_search)
res_dict["Date"] = res.group(0).split(":")[1].strip()
res_dict["description"] = string_to_search.split("Description:")[1].replace("Thank you","")
return res_dict
search_string = """> Irrelevant data
> Irrelevant data
> Type: YUK
> Status: OPEN
> Date: 6/22/2015
> Description: ----
>
> Description blah blah blah
> Thank you
"""
info = get_info(search_string)
print info
print info["Type"]
print info["Status"]
print info["Date"]
print info["description"]
输出:
{'Status': 'OPEN', 'Date': '6/22/2015', 'Type': 'YUK', 'description': ' ----\n>\n> Description blah blah blah\n> \n'}
YUK
OPEN
6/22/2015
----
>
> Description blah blah blah
>
答案 3 :(得分:1)
我认为cvs
模块不是这里使用的模块。如果您只是进行简单搜索,请使用字符串比较并按特征字符拆分它们。如果它更复杂,那就选择正则表达式。
import os
with open("email.txt") as file:
data = [line.replace("> ","") for line in file.readlines()]
for line in data:
s = line.split(":")
if len(s) > 1:
print s[1].strip()