0

私が直面している問題は、パスで os.stat を使用することの一部です (たとえば、C:\myfile1.txt を取ります)。このファイルで os.stat を実行し、結果のリストの 9 番目の要素を取得すると、変更された時間がいくつかの数値 (例: 1348167977) の形で取得されます。

注: これらの数値がどのように計算されるかはわかりません。

C:\myfile1.txt を作成すると、上記の例のような番号が表示されます。別のファイル C:\myfile2.txt を作成すると、C:\myfile1.txt よりも高い変更時刻を表す新しい数値が取得されます (これは予想どおりです)。最後に作成された 3 番目のファイル 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 ""
4

2 に答える 2

5

表示される数値はUNIX タイムスタンプであり、エポック (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()ドキュメントを参照してください。

一方、st_ctime代わりに値にアクセスしました。Python のタプルとリストのインデックスは 0 から始まるため、9 番目の要素はインデックス 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)

ファイルをコピーするとき、通常、最終変更のタイムスタンプなどのプロパティが含まれるため、新しくコピーされたファイルの変更時刻は、前後に簡単に変更される可能性があります。作成時間についても同様です。

于 2012-09-20T19:40:57.217 に答える
0

オフハンドでは、文字列は「エポック時間」形式のように見えます。私はipythonを使用します:

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

私はMac OS Xを使用しているので、man stat. によって返される 9 番目の項目はstat「ctime」のようです。「ctime」は、*nix の世界では、inode データ変更情報を指します。おそらく、実行中の操作を実行してこのフィールドを変更する必要があるかどうかをテストできます。おそらく手動でこれをstat行い、生成されたファイルを実行して、これが変更されるかどうかを確認します。の間違った部分を選択している可能性がありますos.stat

于 2012-09-20T19:59:41.003 に答える