我试图搜索一个充满头文件的特定目录,并查看每个头文件,如果任何文件中有字符串"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
,否则打印的是文件对象,而不是文件本身的名称。