mking7 发表于 2022-3-10 10:21:40

提取文本

如图,我想提取指定前五个数字(比如50136)所在行的内容该怎么做呢?import sys
import re

f = "D:/all.txt"
txt = open(f, "r").read()
g = open("result1.txt","w")
for line in txt:
    if "58450" in line:
      g.write(line)



我这样做结果生成的是空文件。。。


import re

filepath = "D:/all.txt"
txt = open(filepath, "r").read()

result=""
test_text = re.findall("58450+..............", txt)
result = result +'\n'.join(test_text)
f = open("result.txt","w")
f.write(result)





这样做就只有前面三段数字 后面都没有,,,
请求大佬帮助

ba21 发表于 2022-3-10 10:21:41

f = "D:/all.txt"
f2 = "result1.txt"
new = []
with open(f, "r") as txt:
    with open(f2, "w") as g:
      for line in txt:
            if "58450"==line[:5]:
                new.append(line)
      g.writelines(new)


      

isdkz 发表于 2022-3-10 10:26:02

本帖最后由 isdkz 于 2022-3-10 13:11 编辑

你的第一段代码没有得到你想要的结果是因为你迭代的是读出来后的文本内容,

所以你每次迭代出来的 line 都是一个字符,"50136" in line 肯定是不成立的,

你直接迭代文件对象即可,迭代文件对象每次迭代出来的是一行的内容,

还有你不需要用 in 判断,直接用分片判断前 5 个字符即可,因为如果后面也有 "50316" 的话,"50136" in line 也是成立的:

故对你的第一个代码修改如下:
f = open("D:/all.txt", 'r')
g = open("result1.txt","w")
for line in f:
    if line[:5] == "50136":
      g.write(line)

你的第二段代码得不到你想要的结果是因为一个 . 只能匹配一个任意字符,自然多少个点就匹配了多少个字符了,

所以你没必要用这么多个点,直接用 * 贪婪匹配即可,

故对你的第二个代码修改如下:
import re

filepath = "D:/all.txt"
txt = open(filepath, "r").read()

test_text = re.findall("50136.*", txt)
result = '\n'.join(test_text)
f = open("result.txt","w")
f.write(result)
页: [1]
查看完整版本: 提取文本