我的代码非常接近成功,但我只需要一点帮助。如何在不包含周围文本的情况下解析精确数据?
我有100页的数据,但我正在解析只有1页完美,然后才应用到其他人。在这一页,这是一封电子邮件,我需要提取几件事情:日期,部门,鱼种,磅和金钱。到目前为止,我已经成功地使用RegularExpressions来识别某些单词并从该行中提取数据:例如查找“已发送”,因为我知道日期信息将始终跟着该单词,并且查找“磅”或“磅”因为磅信息将永远在此之前。
我遇到的问题是我的代码抓住了数据所在的整行,而不仅仅是数字数据。例如,我想抓住磅的数字值,但我意识到这将是非常困难的,因为100个电子邮件中的每一个都有不同的措辞。我不确定是否甚至有可能使此代码万无一失,因为我需要RegEx识别数据周围的文本,但不会将其包含在我的导出命令中。那么,我是否会盲目地抓住某些被认可的单词后的角色?
这是用于提取英镑数据一块我的代码:
for filename in os.listdir(path):
file_path = os.path.join(path, filename)
if os.path.isfile(file_path):
with open(file_path, 'r') as f:
sector_result = []
pattern = re.compile("Pounds | lbs", re.IGNORECASE)
for linenum, line in enumerate(f):
if pattern.search(line) != None:
sector_result.append((linenum, line.rstrip('\n')))
for linenum, line in sector_result:
print ("Pounds:", line)
而且这里是它打印出:
Pounds: -GOM Cod up to 5,000 lbs (live wt) @ 1.40 lbs
Pounds: -GOM Cod up to 5,000 lbs (live wt) @ 1.40 lbs
Pounds: -American Plaice 2,000 lbs .60 lbs or best offer
理想我只是想在5000磅数值被出口,但我不知道我会如何去抓住这个数字。
这里是我需要解析原始电子邮件文本:
From:
Sent: Friday, November 15, 2013 2:43pm
To:
Subject: NEFS 11 fish for lease
Greetings,
NEFS 11 has the following fish for lease:
-GOM Cod up to 5,000 lbs (live wt) @ 1.40 lbs
-American Plaice 2,000 lbs .60 lbs or best offer
这里是另一个单独的电子邮件尽管这将需要进行解析;这就是为什么写这个代码是困难的,因为它也必须处理各种不同的措词电子邮件,因为它们都通过不同的人写的:
From:
Sent: Monday, December 09, 2013 1:13pm
To:
Subject: NEFS 6 Stocks for lease October 28 2013
Hi All,
The following is available from NEFS VI:
4,000 lbs. GBE COD (live wt)
10,000 lbs. SNE Winter Flounder
10,000 lbs. SNE Yellowtail
10,000 lbs GB Winter Flounder
Will lease for cash or trade for GOM YT, GOM Cod, Dabs, Grey sole stocks on equitable basis.
Please forward all offers.
Thank you,
任何和所有帮助表示赞赏,因为以及提出批评的问题。谢谢。
请提供您尝试解析的源数据的示例或代码片段。 – Keozon
我已添加原始电子邮件。使整个项目变得困难的原因是,每封电子邮件都不会是这样,因为它们都是由不同的人写的。 – Stephen