在目录中搜索特定字符串



我试图搜索一个充满头文件的特定目录,并查看每个头文件,如果任何文件中有字符串"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 )

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

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

使用with构造可以确保文件正确关闭。函数的作用是读取整个文件。

更新

由于最初的海报上说他的代码没有打印,我建议插入一行调试代码:

...
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

当我在我的端上测试它时,这是有效的:

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,否则打印的是文件对象,而不是文件本身的名称。

相关内容

  • 没有找到相关文章

最新更新