17

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

私の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」として表示されます。

4

2 に答える 2

41

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

pytime = os.path.getmtime(os.path.join(root, sc))
# ...
txttime = os.path.getmtime(os.path.join(root, txt))
# ...
if (txttime > pytime):
    # ...
于 2013-02-08T19:21:29.613 に答える
-2

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

于 2013-02-08T19:19:01.717 に答える