13

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

2 回答 2

14

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

...
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:”行,但没有看到预期的输出,则您的文件中可能没有任何“结构”。首先 cd 到目录检查这种情况,然后发出以下 DOS 命令:

find "struct" *.h
于 2013-02-05T15:33:59.747 回答
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()

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

于 2013-02-05T15:27:59.847 回答