我正在分析一个包含 hifen 分隔记录的文件。我想根据字符串、 和xyz.txt
的存在来提取记录。随后,我需要将它们写入新文件。源文件包含超过 40,000 条记录,如下所示。FADED:100
AM:FF
GG
faded100.txt
--- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- rtuyss A/A 加油加油加油加油加油加油加油 IRE AP QQ Z 订单 xxxxxxx1 国家: 201 NVDS TEMPROR EXTREME 巴士时间:TRASS:12 辅助:12 褪色:100 呜呜呜呜呜 GG YYYYYOYOOOOOOO POU ATM 联合 # AM:FF YYYYYOYOOOOOOO POU POU POU POU --- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- rtuyss A/A 加油加油加油加油加油加油加油 IRE AP QQ Z 订单 xxxxxxx1 国家: 201 NVDS TEMPROR EXTREME 公交车时间:TRASS:12 AIDED:12 FADED:200 呜呜呜呜呜 ZZ YYYYYOYOOOOOOO POU ATM 联合 # AM:FF YYYYYOYOOOOOOO POU POU POU POU --- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- rtuyss A/A 加油加油加油加油加油加油加油 IRE AP QQ Z 订单 xxxxxxx1 国家: 201 NVDS TEMPROR EXTREME 巴士时间:TRASS:12 辅助:12 褪色:100 呜呜呜呜呜 IP地址YYYYYOYOOOOOOOPOU ATM 联合 # AM:FF YYYYYOYOOOOOOO POU POU POU POU --- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- ---
答案1
如果可以在记录中找到一组字符串,则从文本文件中提取记录
如果记录满足您在问题中描述的条件,则下面的脚本将从您的文件中提取记录。如果命令很重要,请参阅我的笔记如果订单很重要。
由于脚本逐行读取文件,然后处理这些行每条记录,它处理大文件的速度应该相当快。
剧本
#!/usr/bin/env python3
import sys
#--- set the strings to be (needed to be) found below
checks = ["FADED: 100", "AM:FF", "GG"]
#---
f = sys.argv[1]; out = sys.argv[2]; rec = []; test = []
with open(f) as src, open(out, "a+") as targ:
for l in src:
rec.append(l)
if l.startswith("---"):
if len(test) == 3:
for l in rec:
targ.write(l)
rec = []; test = []
else:
for s in checks:
if s in l:
test.append(checks.index(s))
break
脚本具体做了什么
- 脚本读取一条记录(每行加载),同时记录
["FADED: 100", "AM:FF", "GG"]
该行中是否出现任何字符串。 - 如果记录中没有出现所有三个字符串,则从“缓存”中删除该记录,然后加载下一个记录,依此类推
如果订单很重要
如果其中重要的命令(包含-的行)字符串出现在您的记录中,您可以替换该行:
if len(test) == 3:
经过:
if test == [0, 2, 1]
其中数字指的是索引列表中的字符串checks = ["FADED: 100", "AM:FF", "GG"]
(其中 0 是第一个字符串)
如何使用
- 将脚本复制到一个空文件中,另存为
filter_records.py
使用源(包含当前记录的文件)和输出文件作为参数运行脚本,例如:
python3 /path/to/filter_records.py /path/to/inputfile.txt /path/to/outputfile.txt
结果(就您的小例子而言)
rtuyss A/A go go go go go go go go go go go go go go IRE AP QQ Z
ORDER xxxxxxx1
country: 201 NVDS TEMPROR EXTREME
BUS TIME: TRASS: 12 AIDED: 12 FADED: 100
U U U u U A U O O O O O O O
GG Y Y Y Y Y O Y O O O O O O O POU
ATM UNITED # AM:FF Y Y Y Y Y O Y O O O O O O O POU POU POU POU
--- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- -- --