Uruchom następujący kod w Pythonie 2.7.5. pod Windows:Czas modyfikacji pliku nie jest równy po wywołaniu shutil.copystat (file1, file2) pod Windows
import os, shutil, stat, time
with open('test.txt', 'w') as f: pass # create an arbitrary file
shutil.copy('test.txt', 'test2.txt') # copy it
shutil.copystat('test.txt', 'test2.txt') # copy its stats, too
t1 = os.lstat('test.txt').st_mtime # get the time of last modification for both files
t2 = os.lstat('test2.txt').st_mtime
print t1 # prints something like: 1371123658.54
print t2 # prints the same string, as expected: 1371123658.54
print t1 == t2 # prints False! Why?!
Spodziewam oba znaczniki czasu (= pływaków) do równe (jak sugerują ich reprezentacje smyczkowych), więc dlaczego t1 == t2
ocenić na False
?
Ponadto nie udało mi się odtworzyć tego zachowania przy użyciu mniejszego kodu, tj. Bez porównywania znaczników czasu pobranych za pomocą os.lstat
z dwóch różnych różnych plików. Mam wrażenie, jestem brakuje czegoś trywialnego tutaj ...
Edit: Po dalszych testów zauważyłem, że robi odcisk
True
raz na jakiś czas, ale nie częściej niż raz na 10 działa.
Edit 2: Jak sugeruje larsmans:
print ("%.7f" % t1) # prints e.g. 1371126279.1365688
print ("%.7f" % t2) # prints e.g. 1371126279.1365681
Rodzi to dwa nowe pytania:
- Dlaczego nie równa znaczniki czasu po wywołaniu
shutil.copystat
? print
rundy są domyślnie pływające ?!
Nie można odtworzyć w systemie Debian Linux. Spróbuj 'print ("% .7f "% t1)' i '(t1 - t2) <1e-4', aby sprawdzić, czy" mały wydruk "jest inny. –
Aby zobaczyć, dlaczego rundy drukowania są domyślnie wyświetlane, spróbuj tego: 'x = 10.1 (nowa linia) print ("% .20f "% x)'. To wydrukuje coś innego niż myślisz. Jest to normalne, ponieważ wartości zmiennoprzecinkowe nie mogą dokładnie reprezentować wszystkich wartości ułamkowych. Nie mam pojęcia o problemie z zamkniętymi drzwiami. –
Wiem o reprezentacji binarnej, ale tutaj przypadek jest inny: Mamy float o wartości '10.099999' i wypisuje' 10.1' chociaż nie określiliśmy formatu takiego jak '% .2f' - więc wydaje się, że niejawne zaokrąglenia w efekcie, o których nie wiedziałem i których nigdy wcześniej nie zauważyłem ... –