Glob search files in date order?
我的python脚本中有这一行代码。它搜索特定目录中的所有文件以查找*cycle*.log。
1 | for searchedfile in glob.glob("*cycle*.log"): |
这非常有效,但是当我将脚本运行到网络位置时,它不会按顺序搜索它们,而是随机搜索。
有没有办法强制代码按日期顺序搜索?
这个问题是针对php提出的,但我不确定两者之间的区别。
谢谢
按日期对文件排序:
1 2 3 4 5 6 7 | import glob import os files = glob.glob("*cycle*.log") files.sort(key=os.path.getmtime) print(" ".join(files)) |
号
另请参见如何排序。
好.答案是否定的。
"返回一个列表,其中包含路径所给目录中的条目名称。列表的顺序是任意的。它不包括特殊条目"."和"..",即使它们在目录中也存在。
所以你真的很幸运能把它整理好。你需要自己整理。
这对我很有用:
1 2 3 4 5 6 7 8 9 | import glob import os import time searchedfile = glob.glob("*.cpp") files = sorted( searchedfile, key = lambda file: os.path.getctime(file)) for file in files: print("{} - {}".format(file, time.ctime(os.path.getctime(file))) ) |
还要注意,这使用创建时间,如果要使用修改时间,则使用的函数必须是
如果您的路径是按可排序顺序排列的,那么您总是可以将它们作为字符串进行排序(正如其他人在其答案中已经提到的那样)。
但是,如果您的路径使用像
使用
从模块的测试用例中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import pathlib import tempfile import datetime_glob def test_sort_listdir(self): with tempfile.TemporaryDirectory() as tempdir: pth = pathlib.Path(tempdir) (pth / 'some-description-20.3.2016.txt').write_text('tested') (pth / 'other-description-7.4.2016.txt').write_text('tested') (pth / 'yet-another-description-1.1.2016.txt').write_text('tested') matcher = datetime_glob.Matcher(pattern='*%-d.%-m.%Y.txt') subpths_matches = [(subpth, matcher.match(subpth.name)) for subpth in pth.iterdir()] dtimes_subpths = [(mtch.as_datetime(), subpth) for subpth, mtch in subpths_matches] subpths = [subpth for _, subpth in sorted(dtimes_subpths)] # yapf: disable expected = [ pth / 'yet-another-description-1.1.2016.txt', pth / 'some-description-20.3.2016.txt', pth / 'other-description-7.4.2016.txt' ] # yapf: enable self.assertListEqual(subpths, expected) |
。
基本上与@jfs相同,但在一条线上使用
1 2 | import os,glob searchedfiles = sorted(glob.glob("*cycle*.log"), key=os.path.getmtime) |
您可以使用
使用glob no。现在,当您使用它时,glob将所有文件同时存储在代码中,并且没有组织这些文件的方法。如果最后的结果很重要,您可以使用第二个循环来检查文件的日期,并基于该循环来进行度假。如果解析顺序很重要,那么glob可能不是最好的方法。