python - 使用重新和匹配,我如何从文本文件中搜索和获取某些数据?
问题描述
我已经使用 re 和 matching 从文本文件中提取某些数据。但是我在尝试使用类似技术获取特定数据时遇到问题。继续卡住。因此,发布我用来获取所需行的代码。详细信息在下面代码的末尾。先感谢您!
来自文本文件的数据:
-------------------------------------------------------------------------------------------------------------------------------------
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7
SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO
121 192 175 158 168 BLK NO. 101 DYS OFF 17
CVGORD X X X X AVPDSMORD X X X X GRBDSMORD X X X PIALEXORD X X X X CHALEXORD X X CRD. 72.00 BLK. 58.31
121= 0910/1255/0901; 192= 0810/1915/1536; 175= 0750/1218/0931; 158= 0730/1240/1359; 168= 0758/1239/1638; TAFB 245.09 C/O 0.0
代码:抱歉忘记从我的代码中添加 myDict[key] 已编辑
with open(filename, 'r') as f:
count = 0
for line in f:
matchObj = re.match(dashes1, line)
if matchObj:
count += 1
strcount =str(count)
data = ['','','','']
f.readline()
f.readline()
data[0] = f.readline()
data[1] = f.readline()
key = "myData"+strcount
myDict[key] = data
f.close()
for key in myDict:
print(key, '->', myDict[key])
我的输出是:
myData1 -> [' 121 192 175 158 168 BLK NO. 101 DYS OFF 17\n', ' CVGORD X X X X AVPDSMORD X X X X GRBDSMORD X X X PIALEXORD X X X X CHALEXORD X X CRD. 72.00 BLK. 58.31\n', '', '']
我想在 BLK NO 之后获取数据。即 101,DYS OFF 之后的数据为 17,以此类推 CRD。72.00 和 BLK 的值。值为 58.31。
我不想打印 BLK NO.、DYS OFF、CRD。也不黑。只是它们之后的值。我尝试过使用 re 和匹配的相同方法,但我被卡住了。提前感谢您的帮助!
解决方案
re.findall
在将整个内容读入字符串后,我会让事情保持理智和简单,并在这里使用:
inp = """-------------------------------------------------------------------------------------------------------------------------------------
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7
SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO
121 192 175 158 168 BLK NO. 101 DYS OFF 17
CVGORD X X X X AVPDSMORD X X X X GRBDSMORD X X X PIALEXORD X X X X CHALEXORD X X CRD. 72.00 BLK. 58.31
121= 0910/1255/0901; 192= 0810/1915/1536; 175= 0750/1218/0931; 158= 0730/1240/1359; 168= 0758/1239/1638; TAFB 245.09 C/O 0.0"""
keys = ["BLK NO\.", "DYS OFF", "CRD\.", "BLK\.", "TAFB", "C/O"]
regex = "(" + "|".join(keys) + ")"
matches = re.findall(regex + r'\s+(\d+(?:\.\d+)?)', inp)
print(matches)
这打印:
[('BLK NO.', '101'), ('DYS OFF', '17'), ('CRD.', '72.00'), ('BLK.', '58.31'),
('TAFB', '245.09'), ('C/O', '0.0')]
推荐阅读
- php - 同一功能的“产量”和“产量”
- ansible - Ansible 字典嵌套 For 循环
- python - Python - json.loads 未连接的大字典文件
- python - 使用 Django rest 序列化器过滤查询集
- javascript - Javascript变量未在函数内部更新
- generics - 是否可以编写一个genericFunction<'T>,其中'T 被限制为'T2*'T3 类型的元组?
- flutter - 即使我已经安装了 Flutter 插件 mot 安装仍然发生
- jmeter - 是否可以在 json 验证中使用通配符或忽略 Jmeter 中 json 中的某些值
- azure-devops - Azure DevOps 管道未显示所有运行
- authorization - 在同一 Web 应用程序中使用 Cofoundry 和个人用户帐户身份验证和授权的问题