我在XP上运行Python 2.6.2。我有大量文本文件(100k +)分布在几个文件夹中,我想在外部驱动器上的单个文件夹中合并。
我尝试使用shutil.copy()和shutil.copytree()以及distutils.file_util.copy_file()将文件从源复制到目标。这些方法都没有成功复制源文件夹中的所有文件,并且每次尝试都以IOError Errno 13 Permission Denied结束,我无法创建新的目标文件。
我注意到我使用的所有目标文件夹,无论使用哪个源文件夹,最终都有13,106个文件。我无法在具有这么多(或更多文件)的文件夹中打开任何新文件,这可能就是我得到Errno 13的原因。
我很感激有关此问题是否以及为何发生的建议。
非常感谢, 缺口答案 0 :(得分:2)
您使用的是FAT32吗? FAT32文件夹中的最大目录条目数为65.534。如果文件名长于8.3,则需要多个目录条目。如果您在13,106处进行调用,则表示每个文件名足够长,需要五个目录条目。
解决方案:使用NTFS卷;它没有每个文件夹限制并且本机支持长文件名(即,而不是使用多个8.3条目)。 NTFS卷上的文件总数限制在43亿左右,但它们可以任意组合放在文件夹中。
答案 1 :(得分:0)
我不会在一个文件夹中包含那么多文件,这是一个维护噩梦。但如果你需要,不要在FAT上这样做:你有最大值。 FAT文件夹中的64k文件。
阅读错误消息
您的具体问题也可能是,因为错误消息建议正在访问您无法访问的文件。并且没有理由相信在此之前文件的数量应该改变。毕竟它是一台计算机,你正在重复相同的操作。
答案 2 :(得分:0)
我预测您的外部驱动器格式化为32,并且您写入的文件名大约为45个字符。
FAT32目录中只能有65536个目录条目。长文件名各使用多个目录条目。并且“。”总是占用一个条目。您可以写入65536/5 - 1 = 13106条目强烈建议您的文件名每个占用5个条目,并且您有FAT32文件系统。这是因为存在使用16位数作为目录条目偏移的代码。
此外,您不想要搜索FAT中的多个1000条目目录 - 搜索是线性的。即fopen(some_file)将导致操作系统在每次开始时从文件列表中线性移动,直到找到some_file或从列表末尾开始。
简短回答:目录是件好事。