鱼C论坛

 找回密码
 立即注册
查看: 1138|回复: 2

[已解决]提取文本

[复制链接]
发表于 2022-3-10 10:21:40 | 显示全部楼层 |阅读模式
30鱼币
如图,我想提取指定前五个数字(比如50136)所在行的内容该怎么做呢?
  1. import sys
  2. import re

  3. f = "D:/all.txt"
  4. txt = open(f, "r").read()
  5. g = open("result1.txt","w")
  6. for line in txt:
  7.     if "58450" in line:
  8.         g.write(line)
复制代码




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


  1. import re

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

  4. result=""
  5. test_text = re.findall("58450+..............", txt)
  6. result = result +'\n'.join(test_text)
  7. f = open("result.txt","w")
  8. f.write(result)
复制代码





这样做就只有前面三段数字 后面都没有,,,
请求大佬帮助
最佳答案
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)


        

all.txt

all.txt

result.txt

result.txt

最佳答案

查看完整内容

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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)


        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-10 10:26:02 | 显示全部楼层
本帖最后由 isdkz 于 2022-3-10 13:11 编辑

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

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

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

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

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


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

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

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

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

  4. test_text = re.findall("50136.*", txt)
  5. result = '\n'.join(test_text)
  6. f = open("result.txt","w")
  7. f.write(result)
复制代码

评分

参与人数 1鱼币 +5 收起 理由
mking7 + 5 感谢!!!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 06:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表