按特定顺序处理文件

按特定顺序处理文件

我文件夹中有 40k 张图片。文件名遵循以下模式:

1558058263_18ea873ddcf8c65e.jpg
1558408930_63c29ce4462ec194.jpg 
1558062887_18ea873ddcf8c65e.jpg

在此文件名的第一部分是时间戳,第二部分是生成图像的机器 ID。

我想仅根据时间戳按顺序处理每个文件。如何按顺序获取文件进行处理。我正在使用 python3 来选择文件。当前代码如下:

 for root, dirs, files in os.walk(path):
                for name in files:
                        img=fr.load_image_file('/home/ubuntu/faces/' + name)

答案1

在我看来,你可以使用sort()orsorted()函数(来自堆栈溢出):

# ...
for root, dirs, files in os.walk(path):
   files.sort()
   for name in files:
      print(name)

或者

# ...
for root, dirs, files in os.walk(path):
   for name in sorted(files):
      print(name)

答案2

您可以尝试通过 lambda 进行排序(未经测试):

for root, dirs, files in os.walk(path):
    for name in sorted(files,  key=lambda x: int(re.search(r'\d+', x).group())):
        img=fr.load_image_file('/home/ubuntu/faces/' + name)

答案3

sort命令应该给你你想要的。

ls | sort -n -t '_' -k1

-n按数字排序,而不是默认的字典顺序。
-t '_'指定_为字段分隔符。
-k1对第一个字段进行排序。

答案4

测试过并且效果很好

find . -type f -iname "*.jpg" 2>/dev/null| sed "s/\.\///g"| awk -F "_" '{print $1,$2}'| sort -k1| awk 'OFS="_" {print $1,$2}'

将尽快更新Python脚本

相关内容