Benjamin Intal
14
python
io
file
结论:
似乎HDF5是我的目的.基本上" HDF5是用于存储和管理数据的数据模型,库和文件格式. "并且旨在处理大量数据.它有一个名为python-tables的Python模块.(链接在下面的答案中)
HDF5在节省数吨和大量数据方面完成了1000%的工作.从2亿行读取/修改数据虽然很痛苦,但这是下一个要解决的问题.
我正在构建具有大量子目录和文件的目录树.大约有1000万个文件分布在十万个目录中.每个文件都在32个子目录下.
我有一个python脚本,可以构建这个文件系统并读取和写入这些文件.问题是当我达到一百多万个文件时,读写方法变得非常慢.
这是我的函数,它读取文件的内容(文件包含一个整数字符串),向其添加一定数量,然后将其写回原始文件.
def addInFile(path, scoreToAdd):
num = scoreToAdd
try:
shutil.copyfile(path, '/tmp/tmp.txt')
fp = open('/tmp/tmp.txt', 'r')
num += int(fp.readlines()[0])
fp.close()
except:
pass
fp = open('/tmp/tmp.txt', 'w')
fp.write(str(num))
fp.close()
shutil.copyfile('/tmp/tmp.txt', path)
关系数据库对于访问这些数据似乎太慢了,所以我选择了一种文件系统方法.
我之前尝试过为这些执行linux控制台命令,但速度要慢一些.
我首先将文件复制到临时文件然后访问/修改它然后将其复制回来,因为我发现这比直接访问文件更快.
将所有文件放入1个目录(采用reiserfs格式)会导致访问文件时速度过慢.
我认为减速的原因是因为有大量的文件.执行此功能1000次,时间不到一秒......但现在达到1分钟.
你怎么建议我解决这个问题?我是否更改了目录树结构?
我只需要快速访问这个庞大的文件池中的每个文件*