2012-09-20 34 views
0

我遇到的問題是在路徑上使用os.stat的一部分(以C:\ myfile1.txt爲例)。當我在這個文件上運行os.stat,並在結果列表中獲得第9個元素時,我以某些數字(例如1348167977)的形式得到修改的時間。複製文件時,使用os.stat的Python修改時間變得更短

注:我不知道如何計算這些數字。

當我創建C:\ myfile1.txt它有一些像上面的例子一樣的數字。如果我創建另一個文件C:\ myfile2.txt,它會得到一個新的數字,代表高於C:\ myfile1.txt的修改時間(這是我所期望的)。我還有最後創建的第三個文件C:\ myfile3.txt。

如果我複製C:\ myfile2.txt並用生成的副本文件覆蓋C:\ myfile3.txt,則新的C:\ myfile3.txt上的os.stat顯示的修改時間較少比C:\ myfile1.txt。爲什麼會發生? C:\ myfile3.txt的修改時間應該是所有的最高或至少等於C:\ myfile2.txt。

感謝您的回答,我希望我解釋得很好。

編輯:

下面是一些示例代碼來測試我的形容。有時它有效,如果你在不同的時間重新運行,有時候這些數字都是一樣的。我想我只是不完全理解我輸出的MTIME。

import os 
import shutil 
import time 

myfile1 = open("C:\\myfile1.txt", 'wt') 
myfile1.close() 
time.sleep(10) 
myfile2 = open("C:\\myfile2.txt", 'wt') 
myfile2.close() 
time.sleep(10) 
myfile2 = open("C:\\myfile3.txt", 'wt') 
myfile2.close() 

shutil.copyfile("C:\\myfile2.txt", "C:\\myfile3.txt") 

modified_time_first = (os.stat("C:\\myfile1.txt")[9]) 
modified_time_second = (os.stat("C:\\myfile2.txt")[9]) 
modified_time_third = (os.stat("C:\\myfile3.txt")[9]) 

print "The first files modified time is: " 
print modified_time_first 
print "" 

print "The second files modified time is: " 
print modified_time_second 
print "" 

print "The third files modified time is: " 
print modified_time_third 
print "" 
+0

你可以發佈你的測試代碼嗎? – Blender

+1

順便說一下,爲了理解這些值(這是1970年1月1日以來的秒數),使用'time.ctime(1348167977)'。 – Harel

+0

謝謝Harel!這是一個很大的幫助。 –

回答

4

你看到的數字爲UNIX timestamp,並表示由於時代的秒數,1970年1月1日,您可以使用datetime.datetime.fromtimestamp()來把它轉換成一個Python DateTime對象,例如:

>>> import datetime 
>>> datetime.datetime.fromtimestamp(1348167977) 
datetime.datetime(2012, 9, 20, 21, 6, 17) 

請注意,os.stat()返回一個指定的元組;您可以通過名稱上的元組訪問屬性太:

>>> import os 
>>> os.stat('test.txt').st_mtime 
1348169795.0 

所有可用的屬性見os.stat() documentation

另一方面,您改爲訪問st_ctime值; python元組和列表索引從0開始,所以元素索引爲8.您訪問了索引10,即文件的創建時間。

如果你需要的是一個文件的修改時間,你也可以使用os.path.getmtime()作爲一種方便快捷:

>>> os.path.getmtime('test.txt') 
1348169795.0 
>>> datetime.datetime.fromtimestamp(os.path.getmtime('test.txt')) 
datetime.datetime(2012, 9, 20, 21, 36, 35) 

當複製一個文件,它是如最後的修改時間屬性通常都包括在內,因此新複製文件的修改時間可以容易地改變,無論是向前還是向前。這同樣適用於創作時間。

+0

這正是我所需要的,通過使用st_mtime它捕獲了修改的實際時間。出於某種原因,僅僅抓取MTIME(os.stat()的元組中的第九個元素)並沒有經常更新。再次感謝! –

+0

@BradConyers:我只是在澄清過程中。 'os.stat()[9]'是* 10th *元素,創建時間,而不是修改時間。 :-)使用命名的元組屬性或'os.path.getmtime()'便捷方法的另一個原因。 –

0

Offhand,該字符串看起來是在「時代」格式。我使用的IPython:

import os 
import time 
time.ctime(os.stat('index.php')[9]) 
==>'Fri Jun 15 23:05:07 2012' 

我使用的是Mac OS X,所以我做了man stat。看起來stat返回的第9項是「ctime」。在* nix世界中的「ctime」是指inode數據修改信息。你可能可以測試這個字段是否應該修改執行你正在做的操作。您可能會手動執行此操作,並在生成的文件上運行stat以確認是否應該更改。您可能會選擇os.stat的錯誤部分。