搜索目录中的特定字符串

时间:2013-02-05 15:24:02

标签: python file directory

我正在尝试搜索一个充满头文件的特定目录,并查看每个头文件,如果任何文件中有一个字符串“struct”,我只想让程序打印出哪个文件。

到目前为止,我有这个,但它没有正常工作,你能帮我解决一下吗?

import glob
import os
os.chdir( "C:/headers" )
for files in glob.glob( "*.h" ):
    f = open( files, 'r' )
    for line in f:
        if "struct" in line:
            print( f )

2 个答案:

答案 0 :(得分:12)

您似乎对文件名感兴趣,而不是行,所以我们可以通过阅读整个文件并搜索来加快速度:

...
for file in glob.glob('*.h'):
    with open(file) as f:
        contents = f.read()
    if 'struct' in contents:
        print file

使用with构造可确保正确关闭文件。 f.read()函数读取整个文件。

更新

由于原始海报声明他的代码没有打印,我建议插入调试行:

...
for file in glob.glob('*.h'):
    print 'DEBUG: file=>{0}<'.format(file)
    with open(file) as f:
        contents = f.read()
    if 'struct' in contents:
        print file

如果你没有看到任何以'DEBUG:'开头的行,那么你的glob()返回一个空列表。这意味着你登陆了一个错误的目录。检查目录的拼写以及目录的内容。

如果你看到'DEBUG:'行,但看不到预期的输出,你的文件可能没有任何'struct'。通过先cd到目录检查那个案例,并发出以下DOS命令:

find "struct" *.h

答案 1 :(得分:1)

当我在我的结尾测试时,这是有效的:

for files in glob.glob( "*.h" ):
    f = open( files, 'r' )
    file_contents = f.read()
    if "struct" in file_contents:
            print f.name
    f.close()

确保打印f.name,否则打印文件对象,而不是文件本身的名称。