2013-02-08 29 views
11

Tôi đang tạo một tập lệnh python sẽ truy cập từng dòng từ một tệp Văn bản (nói File.txt) từng cái một rồi tìm kiếm tệp '.py' và '.txt' tương ứng trong thư mục hệ thống. Ví dụ: nếu "COPY" (dòng đầu tiên) được truy cập từ "File.txt" thì tìm kiếm sẽ được thực hiện cho "COPY.py" và "COPY.txt". Nếu cả hai tập tin được tìm thấy thì ngày sửa đổi của chúng sẽ được so sánh. Mã không có lỗi cú pháp Nhưng tôi nhận được kết quả sai.Cách so sánh ngày sửa đổi của hai tệp trong python?

My Python code is:

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

Output:

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 

tôi không nhận được lý do tại sao "COPY2" và "COPY3" đang đưa ra "PASS". Có thể tôi đang làm điều đó một cách sai lầm. Cũng như thay đổi so sánh thành "nếu (txttime < pytime)" trong mã. Tất cả các kết quả được hiển thị dưới dạng "FAIL" ở đầu ra.

+0

Thay vì sử dụng dây thô cho các cửa sổ con đường, thay vì chỉ sử dụng dấu gạch chéo - nó sẽ làm việc tốt (và cũng sẽ làm việc trên các nền tảng khác). –

+0

bạn có thể sử dụng ['os.stat (tên tệp) .st_mtime'] (http://docs.python.org/2/library/stat.html#stat.ST_MTIME) tại đây, nó trả về thời gian sửa đổi cuối cùng. –

Trả lời

0

time.ctime trả về một chuỗi và 'Fri Feb 08 16:34:53 2013' < 'Mon Sep 24 00:50:07 2012'

21

time.ctime() định dạng một thời gian như là một chuỗi, vì vậy bạn đang so sánh các chuỗi "Fri Feb 08 16:34:43 2013""Sat Sep 22 14:19:32 2012" textually. Chỉ cần không làm điều đó và so sánh các float s mà getmtime() mang đến cho bạn trực tiếp:

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

Cảm ơn bạn Nó hoạt động tốt ngay bây giờ. Vấn đề của tôi được giải quyết nhưng làm thế nào mã của tôi trong việc đưa ra "Pass" tất cả các thời gian bằng cách so sánh các chuỗi. Nó có phải là so sánh giá trị ASCII không? – AshA

+0

@AshA Có. Về cơ bản, nó so sánh chuỗi 'Fri… 'có nằm trong từ điển trước chuỗi' Sat… ', mà nó sẽ là vì' F' xuất hiện trước 'S'. – millimoose

+0

Cảm ơn bạn rất nhiều. Vấn đề và giải pháp đã rõ ràng. – AshA