3

我在 ubuntu 中使用 python 2.7。我如何以更详细的顺序对文件进行排序,因为我有一个脚本可以在几秒钟内创建成 txt 苍蝇的数量。我有一个脚本,它可以找到最旧和最年轻的文件,但它似乎只是与第二个而不是毫秒比较。

我的打印输出:

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)用来获取文件的修改时间。

对文件列表进行排序的一种方法是创建它们的列表os.listdir并获取每个文件的修改时间。您将有一个元组列表,您可以按元组的第二个元素(即修改时间)对其进行排序。

您还可以检查os.path.getmtimewith的分辨率os.stat_float_times()。如果后者返回 True 然后os.path.getmtime返回一个浮点数(这表明您的分辨率超过秒数)。

于 2012-06-08T06:47:00.267 回答
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_files接受path作为参数,如果path存在,则将当前目录更改为路径并生成文件列表。get_file_details产生文件的最后修改时间。

get_files返回一个以文件名为键、修改时间为值的字典。然后使用标准sorted对值进行排序。reverse参数可以传递给升序或降序排序。

于 2012-06-08T07:14:37.657 回答
2

您无法比较毫秒数,因为没有此类信息。

stat(2) 调用返回三个 time_t 字段: - 访问时间 - 创建时间 - 最后修改时间

time_t 是一个整数,表示自 1970 年 1 月 1 日 00:00 UTC 以来经过的秒数(不是毫秒)。

因此,您可以在文件时间中拥有的最大细节是秒。我不知道某些文件系统是否提供了更高的分辨率,但是您必须在 C 中使用特定的调用,然后在 Python 中编写包装器才能使用它们。

于 2012-11-15T18:07:01.783 回答
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 回答