2014-09-30 69 views
0

我已經寫了下面的Python腳本來查找文件的最後修改日期:查找文件的最後修改日期的特殊擴展

for root, dirs, files in os.walk(folder_path): 
    for f in files: 
     last_modified = datetime.fromtimestamp(os.path.getmtime(f)).day 
     #do something 

此代碼工作正常像.txt文件的正常文件。但是,如果遇到帶有擴展名如.tar.gz或.run的文件,則在查找last_modified時會拋出一個錯誤,指出「沒有該文件或目錄」。

*編輯*

我意識到,如果我改變如下面的代碼,它工作正常。

for f in files: 
     name = os.path.join(root, f) 
     last_modified = datetime.fromtimestamp(os.path.getmtime(name)).day 
     #do something 

但爲什麼會發生這種情況?

回答

0

os.walk返回文件名相對於它正在行走的文件夾。例如。如果它正在使用名爲bar的文件在名爲foo的目錄中漫遊,它將返回bar而不是foo/bar。但是,由於您的腳本(大概)不在文件夾os中,因此它需要一個絕對路徑或相對於其自身的路徑。因此,您必須加入到文件名的文件夾路徑,以便python可以找到該文件。

由於docs說:

注意的是,在名單上的名字不包含路徑組件。要獲得完整路徑(從頂部開始)到dirpath中的文件或目錄,請執行os.path.join(dirpath,name)。

爲什麼碰巧與我不確定的文本文件一起工作。在包含腳本的文件夾中是否有相同名稱的文本文件?

+0

不,該文本文件與.tar文件位於同一文件夾中。而python腳本位於不同的文件夾中。 – drunkenfist 2014-09-30 16:09:21

+0

@drunkenfist在腳本所在的同一目錄中是否存在具有相同名稱的文本文件?你在哪個操作系統上? – matsjoyce 2014-09-30 16:12:16

+0

我在64位Ubuntu 14.04上運行。 python文件在Desktop /中。我在Desktop/sample/1 /裏面有3個txt文件(a.txt,b.txt,c.txt)和一個tar文件(jdk-8.tar.gz)。 – drunkenfist 2014-09-30 16:46:55

相關問題