【发布时间】:2022-01-13 14:32:22
【问题描述】:
我从文件夹中提取了大量 .txt 文档(使用 glob)。然后我通过这样做将每个文档附加到一个名为 MaxDoc 的列表中:
Documents1 = glob.glob('path*.txt')
MaxDoc = []
for file in Documents1:
f = open(file,'r')
MaxDoc.append(f.readlines())
f.close()
现在,我想做的是:该列表中的每个项目都是一个完整的文档。每个文档都有一个部分显示“上次修订日期:mm/dd/yyyy”和“修订号:xx”
我一直在尝试查看是否可以遍历列表并使用正则表达式来查找字符串并提取信息。一旦我提取它,我需要将它保存为一个变量,因为我需要删除这个文档的所有顶部(文档的后面部分是一个表格,我想将它转换为一个 df)。 TIA 有什么建议!
编辑:
我已使用此正则表达式模式仅对以下文本文档之一进行测试:
handle = open('path','r').read()
Date_of_Last_Rev = re.findall(r'Date\sOf\sLast\sRevision:\s(\d\d\/\d\d\/\d\d\d\d)',handle)
Revision_No: = re.findall(r'Revision\sNo.:(\s\d\d)', handle, re.S)
output: Date_of_Last_Rev: ['12/27/2021']
output: Revision_No: ['18']
所以正则表达式模式有效并且能够识别正确的信息。但是,我仍然无法让它遍历 MaxDoc 列表中的每个文档。
我试过这个:
for item in MaxDoc:
Date_of_Last_Rev =
re.findall(r'Date\sOf\sLast\sRevision:\s(\d\d\/\d\d\/\d\d\d\d)',MaxDoc)
Revision_No: = re.findall(r'Revision\sNo.:(\s\d\d)', MaxDoc, re.S)
还有这个:
for line, item in MaxDoc:
Date_of_Last_Rev =
re.findall(r'Date\sOf\sLast\sRevision:\s(\d\d\/\d\d\/\d\d\d\d)',MaxDoc)
Revision_No: = re.findall(r'Revision\sNo.:(\s\d\d)', MaxDoc, re.S)
我得到一个错误:'expected string or bytes-like object'(第一个示例)或空列表(第二个示例)
根据要求,以下是文本示例:
“根据 | 美国劳工部的工资确定登记册
服务合同法 |用工标准管理
由劳工部长指示|工资和工时划分
|华盛顿特区 20210
|
|
|
|工资确定编号:2015-4001
Daniel W. Simms 分部 |修订号:18
董事工资确定|最后修订日期:2021 年 12 月 27 日
| >_____
注意:受《服务合同法》约束的合同通常需要
至少支付行政命令要求的适用最低工资率
14026 或行政命令 13658。
【问题讨论】:
-
如果你一直在尝试,什么没有奏效?
-
@3DspatialUser,我定义了一个函数 RevDate(s),并做了“return [i for i in f if re.search(r''Date\sof\sLast\sRevision:\s(\ d\d\\\d\d\\\d\d\d\d)', i)]"。然后在 MaxDoc 上调用函数“Last_Rev_Date = RevDate(MaxDoc)。这创建了一个列表变量 Last_Rev_Date,但它是空的