2017-03-08 63 views
1

我試圖循環瀏覽文件夾並讀取文件,但只有第一個文件將打開並正確讀取,但第二個文件打印名稱並通過錯誤「IOError:[Errno 2 ] 無此文件或目錄:」。我曾嘗試以下循環通過python文件夾並打開文件throughs和錯誤

for filename in os.listdir("pathtodir\DataFiles"): 
    if filename.endswith(".log"): 
     print(os.path.join("./DataFiles", filename)) 

     with open(filename) as openfile:  
     for line in openfile: 
     ........ 
+0

該文件不是在'/ DataFiles',根據代碼檢索從'pathtodir \ DataFiles'列表行。您應該首先找出您要查找文件的位置,確定前向或反向(但不是兩者),然後在使用該路徑名時保持一致。你必須在同名文件夾中打開該文件;你的代碼不會這樣做,因爲它試圖在沒有路徑的情況下打開「filename」。您使用的代碼嘗試在三個不同的位置訪問同一個文件,並且僅在其中一個位置。 –

回答

2

os.listdir()只給你的文件名,而不是文件路徑:

import os 

for filename in os.listdir('path/to/dir'): 
    if filename.endswith('.log'): 
     with open(os.path.join('path/to/dir', filename)) as f: 
      content = f.read() 

或者,你可以使用glob模塊。該glob.glob()功能允許您使用模式來過濾文件:

import os 
import glob 

for filepath in glob.glob(os.path.join('path/to/dir', '*.log')): 
    with open(filepath) as f: 
     content = f.read() 
0

使用os.listdir(...)只返回您通過目錄的文件名,而不是完整路徑的文件。打開文件時還需要包含相對目錄路徑。

basepath = "pathtodir/DataFiles/" 
for filename in os.listdir(basepath): 
    if filename.endswith(".log"): 
     print(os.path.join("./DataFiles", filename)) 

     with open(basepath + filename) as openfile:  
      for line in openfile: 
      ........