我有一个包含大约220,000个文本文件的文件夹。我需要按特定顺序打开它们,并对内容做一些事情。目前,我只使用open
,平均需要大约半秒才能打开文件。有没有更快的方法呢?
如果重要 - 我在Windows上。
答案 0 :(得分:1)
过去我遇到过类似的问题。在我的情况下,这是一个充满了我试图处理的jpeg图像的目录。它们在文件名的前几个字符中有相似的名称,这导致了真正的性能问题。
NTFS中有一个遗留兼容性功能,它为每个文件名分配一个符合旧DOS 8.3文件名限制的影子文件名。是的,以前只能命名文件ABCDEFGH.EXT
,文件名不能再长。遗留可比性功能为每个与8.3不匹配的文件分配一个高飞别名,为其命名为ABCDEF~1.EXT
。当你有很多文件时,这种兼容性功能的表现就是说话 - burro可怕。
我刚刚检查了相对较新的Windows 7安装,并且仍然打开了兼容性功能。
您可以使用fsutil
计划which you can read about here关闭整个卷的此功能。您需要具有管理员权限的cmd或powershell窗口才能执行此操作。
fsutil 8dot3name query h:
会告诉您是否在h驱动器上启用了此功能。
fsutil 8dot3name set h: 1
将在您的驱动器上完全禁用它。这可能对您的启动驱动器具有破坏性,特别是如果您有旧的旧版软件。当我实现这个时,我确保包含大量文件的目录在非启动驱动器上,并且我单独启动了启动驱动器。
您可以使用此命令从“目录路径中的所有文件”中剥离阴影8.3名称
fsutil 8dot3name strip /s h:\data\transactions
从大目录中的文件中删除这些名称可能有助于提高性能。 (首先备份目录,也许使用7zip或其他东西)。
在剥离这些旧版文件名之前,请先阅读fsutil的文档!
答案 1 :(得分:0)
这是底层文件系统的问题。使用更适合大量文件的文件系统。构建了一个目录树,在文件名的第一个,第二个,第三个...字符之后将文件排序到目录中。