2013-02-08 39 views
11

Her dosyaya bir Metin dosyasından (File.txt) tek tek erişecek ve sistem dizinindeki ilgili '.py' ve '.txt' dosyalarını arayacak bir python betiği oluşturuyorum. Örneğin, "COPY" (ilk satır) "File.txt" den erişilirse, arama "COPY.py" ve "COPY.txt" için yapılacaktır. Her iki dosya da bulunursa, değişiklik tarihi karşılaştırılır. Kodun sözdizimi hatası yok Ama yanlış çıktı alıyorum.Python'da iki dosyanın değiştirilme tarihi nasıl karşılaştırılır?

Benim Python kodu:

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') 

Çıktı: "COPY2" ve "COPY3" "PASS" veriyoruz neden almıyorum

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 

. Ben yanlış bir şekilde yapıyorum olabilir. Kodun içinde "(txttime < pytime)" olarak karşılaştırmayı değiştirmenin yanı sıra. Tüm sonuçlar çıktıda "FAIL" olarak gösteriliyor.

+0

yerine pencere yolları için ham dizeleri kullanmak yerine sadece ileriye kullanmak eğik - bu iyi çalışır (ve aynı zamanda diğer platformlarda çalışacak). –

+0

Burada ['os.stat (dosya adı) .st_mtime'] (http://docs.python.org/2/library/stat.html#stat.ST_MTIME) 'i kullanabilirsiniz, son değişiklik zamanını döndürür. –

cevap

0

time.ctime bir dize ve 'Fri Feb 08 16:34:53 2013' < 'Mon Sep 24 00:50:07 2012'

21

time.ctime() bir dize olarak bir süre biçimlendirir döndürür, böylece metin olarak dizeleri "Fri Feb 08 16:34:43 2013" ve "Sat Sep 22 14:19:32 2012" kıyaslıyorsun. Sadece getmtime() doğrudan size verdiği yapmak ve float s mukayese etmeyin:

pytime = os.path.getmtime(os.path.join(root, sc)) 
# ... 
txttime = os.path.getmtime(os.path.join(root, txt)) 
# ... 
if (txttime > pytime): 
    # ... 
+0

Teşekkür ederim İyi çalışıyor. Sorunum çözüldü ancak kodlarımı karşılaştırarak kodumu her zaman "Pass" vererek nasıl yaparım. ASCII değer karşılaştırması mı? – AshA

+0

@AshA Evet. Esas olarak, 'F…' dizesinin 'Sat… 'dizisinden önce sözlükte bulunup bulunmayacağını karşılaştırır. – millimoose

+0

Çok teşekkür ederim. Sorun ve çözümler şu an açık. – AshA

İlgili konular