目录
一、背景
在处理大批量文件时,需要多文件进行分批处理,然而在文件进行处理之前,首先需要对一批进行排序。因为当我们分批在不同的服务器上进行跑时,获得的文件顺序有可能不一样。
二、排序
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. 综合示例:按文件大小逆序排序
结合 key
和 reverse
,可以实现更复杂的排序。
示例:
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
,可以实现逆序排序。
如果你有更具体的排序需求,可以告诉我,我会帮你写出对应的代码!