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