2013-02-08 4 views
11

私はテキストファイル(例えばFile.txt)から各行にアクセスし、システムディレクトリに対応する '.py'と '.txt'ファイルを検索するPythonスクリプトを作成しています。たとえば、 "COPY"(最初の行)に "File.txt"からアクセスすると、 "COPY.py"と "COPY.txt"が検索されます。両方のファイルが見つかった場合は、その変更日が比較されます。コードに構文エラーはありませんが、出力が間違っています。Pythonで2つのファイルの修正日を比較するには?

私のPythonコードです:

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

出力:

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 

"COPY2" と "COPY3" は "PASS" を与えている理由を私は得ていないのです。私は間違った方法でそれをやっているかもしれません。 同様に、コードを"if(txttime < pytime)"として比較を変更します。 すべての結果が出力でFAILと表示されています。

+0

代わりに、Windowsのパスの生の文字列を使用するのではなく、単にスラッシュを使用する - それが正常に動作します(とも他のプラットフォームで動作します)。 –

+0

ここで['os.stat(filename).st_mtime'](http://docs.python.org/2/library/stat.html#stat.ST_MTIME)を使用すると、最後の変更時刻が返されます。 –

答えて

0

time.ctimeは、文字列を返し、'Fri Feb 08 16:34:53 2013' < 'Mon Sep 24 00:50:07 2012'

21

time.ctime()は、文字列として時間をフォーマットするので、あなたは、テキスト形式の文字列"Fri Feb 08 16:34:43 2013""Sat Sep 22 14:19:32 2012"を比較しています。ただ、それを行うとgetmtime()が直接あなたを与えることfloat Sを比較しません:

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

ありがとう今は問題なく動作します。私の問題は解決されましたが、文字列を比較することによって、どのようにして "Pass"を与えるのでしょうか。 ASCII値の比較ですか? – AshA

+0

@AshAはい。基本的に 'Fri ...'という文字列が辞書の 'Sat ...'の前に来るかどうかを比較します。これは 'F'が' S'の前に来るためです。 – millimoose

+0

ありがとうございました。問題と解決策は現在明らかです。 – AshA

関連する問題