【问题标题】:Python - Search all files for "exit 0" stringPython - 在所有文件中搜索“exit 0”字符串
【发布时间】:2017-09-04 11:11:41
【问题描述】:

我正在尝试使用 python 搜索文件目录并打开每个文件以搜索字符串。

我们所说的文件少于 1000 个,每个文件有 1、2、3 行,因此打开它们只需几秒钟。

好吧,我想我已经成功了,但是有一个问题:我要搜索的字符串是“exit 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 文件的数量,但如果将字符串更改为 exit 1,则最后“teste”的值是 0。我实际上是在搜索其中一些文件中存在的“exit 0”字符串。

有可能吗?我已经对其进行了测试,如果我将字符串值更改为存在的值,则计数是正确的。

有什么帮助吗?

谢谢,

【问题讨论】:

  • 当您打印“line”变量时,您会得到什么?是否包含“exit 0”字符串?
  • 您计算的是 number 行,而不是文件数。要计算文件数,请在文件中找到匹配项后中断。

标签: python search glob


【解决方案1】:

每匹配一行,您的计数器就会增加;如果一个文件多次包含该字符串,则每次匹配都会增加计数器。

您可以通过在计数器增量后添加中断来解决此问题。这将导致 Python 立即转到下一个文件。

【讨论】:

    【解决方案2】:

    您可能会阅读所有内容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
    

    【讨论】:

      【解决方案3】:

      感谢您的 cmets。当我开始打印“line”值时,我注意到他正在从其他地方获取“exit 0”,再次查看脚本并发现在具有 exit 0 的文件内部调用了第三个脚本写的。

      我不同意这种做事方式,但我没有足够的权力来改变做事的方式,所以在那之后我可以解决我的问题,发现搜索“exit 0”根本不是我的问题。

      干杯

      【讨论】:

        猜你喜欢
        • 2011-12-12
        • 2021-12-15
        • 1970-01-01
        • 1970-01-01
        • 2013-02-09
        • 1970-01-01
        • 2012-09-09
        • 2016-05-06
        • 1970-01-01
        相关资源
        最近更新 更多