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