首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从HD优化文件读取

从HD优化文件读取
EN

Stack Overflow用户
提问于 2011-02-01 08:25:25
回答 5查看 158关注 0票数 1

我有以下循环:

代码语言:javascript
运行
复制
for fileName in fileList:
    f = open(fileName)
    txt = open(f).read()
    analyze(txt)

fileList是一个包含100多万个小文件的列表。根据经验,我发现调用open(fileName)需要超过90%的循环运行时间。你会怎么做才能优化这个循环。这是一个“只有软件”的问题,购买新的硬件不是一个选择。

有关此文件集合的一些信息:

每个文件名都是一个9-13位数字的ID。文件按照ID的前4位数排列在子文件夹中。这些文件存储在NTFS磁盘上,我宁愿不改变磁盘格式,因为我无法进入,除非这里的人坚信这样的更改会带来巨大的差异。

解决方案

谢谢大家的回答。

我的解决方案是传递所有文件,解析它们并将结果放入SQLite数据库。不,我对数据执行的分析(选择几个条目,做数学计算)只需几秒钟。已经说过,读取部分花费了大约90%的时间,因此与不必从磁盘读取实际文件相比,提前解析XML文件对性能的影响很小。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-01 08:33:19

如果文件的打开和关闭占用了大部分时间,那么最好的方法是使用数据库或数据存储来存储文件,而不是使用平面文件的集合。

票数 1
EN

Stack Overflow用户

发布于 2011-02-01 08:29:25

硬件解决方案

您应该从使用固态驱动 (SSD)中真正受益。这些设备比传统的硬盘驱动器要快得多,因为它们没有任何硬件组件需要旋转和移动。

软件解决方案

这些文件是在您的控制之下,还是来自外部系统?如果你能控制,我建议你用数据库来存储信息。

如果数据库对您来说太麻烦了,请尝试将信息存储在一个文件中并从中读取。如果不太分散,与拥有数百万个小文件相比,您将有更好的性能。

票数 2
EN

Stack Overflow用户

发布于 2011-02-01 08:35:52

为了解决你的最后一点:

除非这里的人坚信这样的改变会带来巨大的改变

如果我们说的是100万个小文件,那么将它们合并成一个大文件(或少量的文件)几乎肯定会产生巨大的影响。试着做个实验。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4860331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档