用python实现TXT文件的搜索功能

望大神给予帮助谢谢

1.用python编辑

2.打开文件,读入文章

3.从文件中搜索到指定字符前后几行(假设5行)的内容并输出

4.关闭文件
...全文
564 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
yzzsky_Python 2019-03-23
  • 打赏
  • 举报
回复
5行?还是5个字符?
  • 打赏
  • 举报
回复
引用 7 楼 请叫我低调的大大大大大大大仙女儿 的回复:
[quote=引用 2 楼 weixin_43690548 的回复:]
文件大的话:
def indexSearch(path, str):
with open(path, 'r') as f:
indexFlag = 0
for line in f:
if str in line:
break
indexFlag += 1
value = []
resultFlag = 0
for line in f:
if resultFlag > indexFlag + 5:
break
elif resultFlag >= indexFlag -5 or resultFlag <= indexFlag + 5:
value.append(line)
resultFlag += 1

这是思路,没有实际运行过,应该可以使用

这个运行出错[/quote]
可以修改为:
def indexSearch(path, str):
with open(path, 'r') as f:
flag = False
endCount = 0
result = []
for line in f:
if str in line:
flag = True
if not flag:
result.append(line)
result = result[-5:]
elif endCount < 5:
result.sppend(line)
endCount += 1

试试
  • 打赏
  • 举报
回复
引用 7 楼 请叫我低调的大大大大大大大仙女儿 的回复:
[quote=引用 2 楼 weixin_43690548 的回复:]
文件大的话:
def indexSearch(path, str):
with open(path, 'r') as f:
indexFlag = 0
for line in f:
if str in line:
break
indexFlag += 1
value = []
resultFlag = 0
for line in f:
if resultFlag > indexFlag + 5:
break
elif resultFlag >= indexFlag -5 or resultFlag <= indexFlag + 5:
value.append(line)
resultFlag += 1

这是思路,没有实际运行过,应该可以使用

这个运行出错[/quote]
这个只是思路!

  • 打赏
  • 举报
回复
引用 2 楼 weixin_43690548 的回复:
文件大的话:
def indexSearch(path, str):
with open(path, 'r') as f:
indexFlag = 0
for line in f:
if str in line:
break
indexFlag += 1
value = []
resultFlag = 0
for line in f:
if resultFlag > indexFlag + 5:
break
elif resultFlag >= indexFlag -5 or resultFlag <= indexFlag + 5:
value.append(line)
resultFlag += 1

这是思路,没有实际运行过,应该可以使用

这个运行出错
  • 打赏
  • 举报
回复
引用 4 楼 woailp___2005 的回复:
可以每次读入一行,将前五行用内存存起来 继续完后读,保存的内容一直动态存储,直到读到有指定字符的行,输出前面保存的内容和继续后读5行的内容 不过不应该考虑指定的内容会存在多行,不是读到就关闭文件耳饰需要读完整个文件吗
可以啊! 只是代码复杂度会稍微大一点.思路会稍微复杂一点.python 之禅提倡simple
  • 打赏
  • 举报
回复
是需要知道指定字符前后的内容,所以读到指定字符,还要继续往下读@woailp__2005
Q446512799 2019-03-20
  • 打赏
  • 举报
回复
可以每次读入一行,将前五行用内存存起来
继续完后读,保存的内容一直动态存储,直到读到有指定字符的行,输出前面保存的内容和继续后读5行的内容
不过不应该考虑指定的内容会存在多行,不是读到就关闭文件耳饰需要读完整个文件吗
  • 打赏
  • 举报
回复
两个f要分开函数使用, 打开文件时的光标会随着使用而改变,不会每次使用重新恢复到文件开头位置.
  • 打赏
  • 举报
回复
文件大的话:
def indexSearch(path, str):
    with open(path, 'r') as f:
        indexFlag = 0
        for line in f:
            if str in line:
                break
            indexFlag += 1
        value = []
        resultFlag = 0
        for line in f:
            if resultFlag > indexFlag + 5:
                break
            elif resultFlag >= indexFlag -5 or resultFlag <= indexFlag + 5:
                value.append(line)
            resultFlag += 1
这是思路,没有实际运行过,应该可以使用
  • 打赏
  • 举报
回复
这个比较简单, 文件不大的话,以writelines形式打开文件, 判断字符串在列表的哪一行的,获取该行索引index,获取最后结果:切片列表[index - 5: index + 5]

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧