3

私はubuntuでpython2.7を使用しています。数秒間のtxtハエを作成するスクリプトがあったので、ファイルをより詳細な順序で並べ替えるにはどうすればよいですか。スクリプトをmodしました。最も古いファイルと最も若いファイルを見つけることができますが、ミリ秒ではなく2番目のファイルと比較しているようです。

私の印刷出力:

output_04.txt                     06/08/12 12:00:18
output_05.txt                     06/08/12 12:00:18

-----------
oldest: output_05.txt    
youngest: output_05.txt
-----------

ただし、最も古いファイルの正しい順序は「output_04.txt」である必要があります。専門知識はありますか?ありがとう!

更新:みんなありがとう。すべてのコードを試してみましたが、必要な出力が得られないようです。申し訳ありませんが、皆さんに感謝します。しかし、上記のような私のファイルの例は同じ時刻であるため、完全な日付、時、分、秒がすべて同じである場合、ミリ秒単位で比較する必要があります。ではない?私が間違っている場合は私を訂正してください。みんな、ありがとう!乾杯!

4

4 に答える 4

3

os.path.getmtime(path_to_file)ファイルの変更時刻を取得するために使用できます。

ファイルのリストを並べ替える 1 つの方法は、 でファイルのリストを作成し、os.listdirそれぞれの変更時刻を取得することです。タプルのリストがあり、タプルの 2 番目の要素 (変更時間) で並べ替えることができます。

os.path.getmtimeの解像度も確認できますos.stat_float_times()。後者が True をos.path.getmtime返す場合は、float を返します (これは、秒よりも多くの解像度があることを示します)。

于 2012-06-08T06:47:00.267 に答える
2

そのような情報がないため、ミリ秒を比較することはできません。

stat(2) 呼び出しは、次の 3 つの time_t フィールドを返します。 - アクセス時間 - 作成時間 - 最終変更時間

time_t は、UTC 1970 年 1 月 1 日 00:00 から経過した秒数 (ミリ秒ではない) を表す整数です。

したがって、ファイル時間に含めることができる最大の詳細は秒です。一部のファイルシステムがより多くの解像度を提供するかどうかはわかりませんが、C で特定の呼び出しを使用し、それらを使用するには Python でラッパーを作成する必要があります。

于 2012-11-15T18:07:01.783 に答える
2
def get_files(path):
    import os
    if os.path.exists(path):
        os.chdir(path)
        files = (os.listdir(path))
        items = {}
        def get_file_details(f):
            return {f:os.path.getmtime(f)}
        results = [get_file_details(f) for f in files]
        for result in results:
            for key, value in result.items():
                items[key] = value
    return items

v = sorted(get_files(path), key=r.get)

get_filespath引数として取り、存在する場合はpath、現在のディレクトリをパスに変更し、ファイルのリストを生成します。get_file_detailsファイルの最終変更時刻を返します。

get_filesファイル名をキー、変更時刻を値とする dict を返します。sorted次に、値のソートにstandardが使用されます。reverseパラメータを渡して、昇順または降順で並べ替えることができます。

于 2012-06-08T07:14:37.657 に答える
1

こんにちは、次のコードを試してください

# retrieve the file information from a selected folder
# sort the files by last modified date/time and display in order newest file first
# tested with Python24    vegaseat    21jan2006
import os, glob, time
# use a folder you have ...
root = 'D:\\Zz1\\Cartoons\\' # one specific folder
#root = 'D:\\Zz1\\*'          # all the subfolders too
date_file_list = []
for folder in glob.glob(root):
    print "folder =", folder
    # select the type of file, for instance *.jpg or all files *.*
    for file in glob.glob(folder + '/*.*'):
        # retrieves the stats for the current file as a tuple
        # (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime)
        # the tuple element mtime at index 8 is the last-modified-date
        stats = os.stat(file)
        # create tuple (year yyyy, month(1-12), day(1-31), hour(0-23), minute(0-59), second(0-59),
        # weekday(0-6, 0 is monday), Julian day(1-366), daylight flag(-1,0 or 1)) from seconds since epoch
        # note:  this tuple can be sorted properly by date and time
        lastmod_date = time.localtime(stats[8])
        #print image_file, lastmod_date   # test
        # create list of tuples ready for sorting by date
        date_file_tuple = lastmod_date, file
        date_file_list.append(date_file_tuple)

#print date_file_list  # test
date_file_list.sort()
date_file_list.reverse()  # newest mod date now first
print "%-40s %s" % ("filename:", "last modified:")
for file in date_file_list:
    # extract just the filename
    folder, file_name = os.path.split(file[1])
    # convert date tuple to MM/DD/YYYY HH:MM:SS format
    file_date = time.strftime("%m/%d/%y %H:%M:%S", file[0])
    print "%-40s %s" % (file_name, file_date)

これがお役に立てば幸いです

ありがとうございました

于 2012-06-08T06:54:06.817 に答える