Tworzę skrypt w języku Python, który będzie uzyskiwał dostęp do każdej linii z pliku tekstowego (np. Pliku.txt), a następnie wyszukaj odpowiedni plik ".py" i ".txt" w katalogu systemowym. Na przykład, jeśli "COPY" (pierwsza linia) jest dostępna z "File.txt", wówczas wyszukiwanie zostanie wykonane dla "COPY.py" i "COPY.txt". Jeśli oba pliki zostaną znalezione, ich data modyfikacji zostanie porównana. Kod nie zawiera błędu składni, ale otrzymuję nieprawidłowy wynik.Jak porównać zmodyfikowaną datę dwóch plików w pythonie?
kod Mój Python jest:
for line in fileinput.input(r'D:\Python_Programs\File.txt'):
line = line[0:-1]
sc = ''.join((line,'.py'))
lo = ''.join((line,'.txt'))
for root, dirs, files in os.walk(r'D:\txt and py'):
if sc in files:
pytime = time.ctime(os.path.getmtime(os.path.join(root, sc)))
print(sc, ' :', pytime)
for root, dirs, files in os.walk(root):
if txt in files:
txttime = time.ctime(os.path.getmtime(os.path.join(root, txt)))
print(txt, ' :', txttime)
if (txttime > pytime):
print('PASS', '\n')
else:
print('FAIL', '\n')
wyjściowa:
COPY.py : Mon Aug 27 10:50:06 2012
COPY.txt : Mon Feb 04 11:05:31 2013
PASS #Expected = PASS
COPY2.py : Fri Feb 08 16:34:43 2013
COPY2.txt : Sat Sep 22 14:19:32 2012
PASS #Expected = FAIL
COPY3.py : Fri Feb 08 16:34:53 2013
COPY3.txt : Mon Sep 24 00:50:07 2012
PASS #Expected = FAIL
nie otrzymuję dlaczego "COPY2" i "COPY3" dają "pass". Być może robię to w niewłaściwy sposób. Podobnie jak przy zmianie porównania jako "if (txttime < pytime)" w kodzie. Wszystkie wyniki są wyświetlane jako "FAIL" na wyjściu.
Zamiast surowych struny do okien ścieżek, zamiast po prostu użyć ukośniki - będzie działać dobrze (i będzie również działać na innych platformach). –
można użyć ["os.stat (nazwa pliku) .st_mtime"] (http://docs.python.org/2/library/stat.html#stat.ST_MTIME) tutaj, zwraca ostatni czas modyfikacji. –