2017-05-31 60 views
0

我有一個文件夾,裏面有40個文件,我想循環播放。當我打印出了名的文件我的代碼工作正常:Unabe用Python循環播放文件

import os 
source = 'pathtofile' 
for root, dirs, filenames in os.walk(source): 
    for file in filenames: 
     print file 

它會打印:

文件1

文件2

文件3

.....

文件40

但是,如果我嘗試打開循環中的文件/文件,我得到以下錯誤。 IO錯誤:IO錯誤:[錯誤2]沒有這樣的文件或目錄:「file.txt的」

這是我有問題的代碼:

import os 
import re 

destdir = 'pathtofile' 
files = [ f for f in os.listdir(destdir) if 
os.path.isfile(os.path.join(destdir,f)) ] 

for f in files: 
    with open(f, 'r') as var1: 
     for line in var1: 
      if re.match('(.*)exception(.*)', line): 
       print line 

我已經驗證和字符串我正在尋找,它確實存在於文件中。

您能否提供一些有關我的代碼出現問題的信息?謝謝。

+0

'F'仍然只是文件名,因爲你把它定義的是方法:'爲文件名中的f:'爲什麼用'log = open(...)'行替換'open(...)作爲f:'行? –

+0

謝謝哈克。我正在對兩者進行試驗,因爲在某些帖子中,我讀到它需要完整的路徑,並嘗試使用和不使用完整路徑。 –

+1

是的,但'log ='搞砸了。你不會在任何地方使用'log',並且當你爲'f'中的行寫''時,'f'就是_filename_。你的第一次嘗試更接近,但錯過了完整的路徑。 –

回答

1

這是你想要什麼:

from os.path import join, isfile 

files = [join(destdir, x) for x in os.listdir(destdir) if isfile(join(destdir, x))] 

,或者如果你知道所有文件都.txt擴展,你可以這樣做:

from glob import glob 

files = glob(join(destdir, '*.txt')) 
+0

非常感謝!它正在工作。所以,爲了記錄,在處理文件時,我們需要每次都添加完整路徑? –

+0

不客氣。 'listdir'只返回給定路徑中的內容文件/目錄的名稱。請檢查文檔:https://docs.python.org/3/library/os.html#os.listdir –

+0

我一定會這樣做。 –