1

を使用してファイルの変更時刻を取得するコードを作成しました

os.path.getmtime('path')

のような数値を返します965465464.19234。私はそれをバイトに変換し、ソケットを介して送信します。もう一方の端では、ソケットを読み取り、次を使用してこのタイムスタンプを別のファイルに設定しようとします。

os.utime('path',(access_time, modified_time))

受信したソケットaccess_timeを設定しようとしている間、同じままであることを確認します。modified_timeしかしutime、整数を期待しているので、数値を切り捨てると(例:)、965465464問題なく動作します。

切り捨てることで何かを失っていますか?どうすればこれを改善できますか?

4

2 に答える 2

3

問題はmodified_timeがfloatまたはintegerであることに関係しているとは思いません。以下のコードが機能するはずです。私はすべてをしましたが、それを有線で送信します。

import os
from datetime import datetime
from calendar import timegm
import sys
st_info = os.stat('foo.py')
st_info.st_atime #acces time
st_info.st_mtime #modified time
mtime = st_info.st_mtime
atime = st_info.st_atime
# send over the wire
os.utime('foo.py', (atime, mtime))

ご覧のとおり、os.utimeはfloatで問題なく実行できます。

mtime

アウト[15]:1322517342.0

[16]の場合:type(mtime)

Out [16]:フロート

于 2012-11-16T04:16:00.027 に答える
2

getmtime()を返しますst_mtimeドキュメントから:

注:st_atime、st_mtime、およびst_ctime属性の正確な意味と解決策は、オペレーティングシステムとファイルシステムによって異なります。たとえば、FATまたはFAT32ファイルシステムを使用するWindowsシステムでは、st_mtimeの解像度は2秒で、st_atimeの解像度は1日だけです。詳細については、オペレーティングシステムのドキュメントを参照してください。同様に、st_atime_ns、st_mtime_ns、およびst_ctime_nsは常にナノ秒で表されますが、多くのシステムはナノ秒の精度を提供しません。ナノ秒の精度を提供するシステムでは、st_atime、st_mtime、およびst_ctimeの格納に使用される浮動小数点オブジェクトはすべてを保持できないため、わずかに不正確になります。正確なタイムスタンプが必要な場合は、常にst_atime_ns、st_mtime_ns、およびst_ctime_nsを使用する必要があります。

私を強調する

パラメータを使用nsして、整数ナノ秒をからに渡すos.stat()ことができos.utime()ます。

os.utime(path, ns=(access_time_ns, modified_time_ns))
于 2012-11-16T04:11:55.887 に答える