【工程实践/大批量文件处理】文件排序

一、背景


在处理大批量文件时,需要多文件进行分批处理,然而在文件进行处理之前,首先需要对一批进行排序。因为当我们分批在不同的服务器上进行跑时,获得的文件顺序有可能不一样。

二、排序


import os
# 根目录
root_dir = "/data/hyq/data/文件/简历"
output_dir = "/data/hyq/ocr简历"

# 收集所有PDF文件路径
pdf_files = []
for dirpath, _, filenames in os.walk(root_dir):
    for filename in filenames:
        if filename.endswith(".pdf"):
            pdf_files.append(os.path.join(dirpath, filename))

## 排序
pdf_files_sorted = sorted(pdf_files)
for i, file_path in enumerate(pdf_files_sorted[:20], 1):
    print(f"{i}. {file_path}")

这一句非常重要,将提取出来的文件列表先排序

pdf_files_sorted = sorted(pdf_files)

在 Python 中,sorted 函数可以对文件列表进行排序。文件列表通常是字符串列表(文件路径或文件名),sorted 默认会按字母顺序(字典序)对它们进行排序。如果你需要按其他规则排序(例如文件大小、修改时间等),可以通过 key 参数自定义排序规则。


1. 默认排序(按文件名字母顺序)

如果文件列表是文件名或文件路径,sorted 会按字母顺序排序。

示例:
files = ["file3.txt", "file1.txt", "file2.pdf"]
sorted_files = sorted(files)
print(sorted_files)
输出:
['file1.txt', 'file2.pdf', 'file3.txt']

2. 按文件扩展名排序

如果需要按文件扩展名排序,可以通过 key 参数指定排序规则。

示例:
files = ["file3.txt", "file1.txt", "file2.pdf"]

# 按文件扩展名排序
sorted_files = sorted(files, key=lambda x: x.split(".")[-1])
print(sorted_files)
输出:
['file2.pdf', 'file1.txt', 'file3.txt']

3. 按文件大小排序

如果需要按文件大小排序,可以使用 os.path.getsize 获取文件大小,并将其作为排序的 key

示例:
import os

files = ["file3.txt", "file1.txt", "file2.pdf"]

# 按文件大小排序
sorted_files = sorted(files, key=lambda x: os.path.getsize(x))
print(sorted_files)
输出:
['file2.pdf', 'file1.txt', 'file3.txt']  # 假设 file2.pdf 最小,file3.txt 最大

4. 按文件修改时间排序

如果需要按文件修改时间排序,可以使用 os.path.getmtime 获取文件的最后修改时间,并将其作为排序的 key

示例:
import os

files = ["file3.txt", "file1.txt", "file2.pdf"]

# 按文件修改时间排序
sorted_files = sorted(files, key=lambda x: os.path.getmtime(x))
print(sorted_files)
输出:
['file1.txt', 'file2.pdf', 'file3.txt']  # 假设 file1.txt 是最早修改的

5. 按文件路径深度排序

如果需要按文件路径的深度排序(即文件所在的目录层级),可以通过计算路径中分隔符的数量来实现。

示例:
files = ["/root/file1.txt", "/root/dir1/file2.pdf", "/root/dir1/subdir/file3.txt"]

# 按文件路径深度排序
sorted_files = sorted(files, key=lambda x: x.count(os.sep))
print(sorted_files)
输出:
['/root/file1.txt', '/root/dir1/file2.pdf', '/root/dir1/subdir/file3.txt']

6. 逆序排序

如果需要逆序排序,可以设置 reverse=True

示例:
files = ["file3.txt", "file1.txt", "file2.pdf"]

# 按文件名逆序排序
sorted_files = sorted(files, reverse=True)
print(sorted_files)
输出:
['file3.txt', 'file2.pdf', 'file1.txt']

7. 综合示例:按文件大小逆序排序

结合 keyreverse,可以实现更复杂的排序。

示例:
import os

files = ["file3.txt", "file1.txt", "file2.pdf"]

# 按文件大小逆序排序
sorted_files = sorted(files, key=lambda x: os.path.getsize(x), reverse=True)
print(sorted_files)
输出:
['file3.txt', 'file1.txt', 'file2.pdf']  # 假设 file3.txt 最大,file2.pdf 最小

总结

  • sorted 函数可以对文件列表进行排序,默认按字母顺序排序。
  • 通过 key 参数,可以自定义排序规则,例如按文件扩展名、文件大小、修改时间等。
  • 通过 reverse=True,可以实现逆序排序。

如果你有更具体的排序需求,可以告诉我,我会帮你写出对应的代码!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海绵波波107

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值