我正在尝试使用python搜索文件目录并打开每个文件以搜索字符串。
我们谈论的文件不到1000个,每个文件分别有1,2,3行,所以打开它们只需要几秒钟。
嗯,我认为我已经成功了,但是有一个问题:我要搜索的字符串是“退出0 ”。
#!/usr/bin/env python
import glob
scriptsdir = "/dummydir/*.ksh"
string = "exit 0"
files = glob.glob(scriptsdir)
teste = 0
for script in files:
f=open(script,"r")
for line in f:
if string in line:
teste = teste + 1
f.close()
print teste
这很糟糕,因为代码正常工作:像这样,最后的“teste”值指的是目录上的.ksh文件数,但是如果将字符串更改为退出1 ,最终“teste”的值为0.我实际上是在搜索某些文件中存在的“退出0 ”字符串。
有可能吗?我已经测试了它,如果我将字符串值更改为存在的值,则计数正确。
有任何帮助吗?
谢谢,
答案 0 :(得分:0)
每个匹配的行都会增加您的计数器;如果一个文件有多次该字符串,则每次匹配都会增加计数器。
您可以通过在计数器增量后添加一个中断来解决此问题。这将导致Python立即转移到下一个文件。
答案 1 :(得分:0)
你可能会阅读所有内容f.read()
。
#!/usr/bin/env python
import glob
scriptsdir = "/dummydir/*.ksh"
string = "exit 0"
files = glob.glob(scriptsdir)
teste = 0
for script in files:
f=open(script,"r")
if string in f.read():
teste = teste + 1
f.close()
print teste
答案 2 :(得分:0)
感谢您的评论。一旦我开始打印“line”值,我注意到他从其他地方获得了“exit 0”,再次查看脚本并发现第三个脚本正在调用具有出口0的文件内部写入。
我不同意这种做事方式,但我没有足够的力量来改变事情的方式,所以在那之后我可以解决我的问题并且看到搜索“退出0”根本不是我的问题。 / p>
干杯