os.listdir()返回一个list
...
当使用open()
打开一个文件,你需要提供一个路径到file
- 不是list
。这是什么导致你的错误。
如果我理解正确的,你想要的是loop
通过在该目录中(让他们与os.listdir()
)的文件和每个文件检查,如果任何行包含“错误”,“警告”或“严重”。
要做到这一点,你可以不喜欢,如果该文件是在当前工作目录:
import os
for file in os.listdir():
with open(file) as f:
for line in f:
if 'Error' in line or 'Warning' in line or 'Severity in line:
print('the line was', line)
print('the file was', file)
上面的代码是相当不言自明的,从本质上讲,你遍历目录中的每个文件,打开该文件为'f'
。然后,对于文件'f'
中的每一行,只需检查'Error'
,'warning'
或'Severity'
是否在该行中。
在这里的代码,它只是简单地打印行和包含文件,但当然,如果你想存储这些或与他们做别的事情,你可以。
更新:
我认为错误的事实的文件不在当前工作目录,以便您通过在目录中的文件名,而不是路径文件循环来了。因此,当您尝试执行open(file)
时,它不起作用,因为它在当前目录中搜索您正在运行程序的文件名称,而不是从文件路径"D:\express\abc_xyz_9.0_12_9_17_23_11.log"
打开。
为了解决这个问题,你可以做使用os.path.join
:
import os
os.chdir("D:\express")
for file in os.listdir():
...
我个人认为,改变目录是整洁:
for file in os.listdir("D:\express"):
with open(os.path.join("D:\express", "file")) as f:
...
或者更简单地只是os.chdir
到"D:\express"
改变当前的工作目录。
希望这会有所帮助!
'listdir',毫不奇怪,给你一个*列表*。你不能一次打开整个列表,也许试着迭代它? – jonrsharpe
使用glob模块进行模式匹配文件。 – Mike