结论: 似乎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)
Run Code Online (Sandbox Code Playgroud)
我认为减速的原因是因为有大量的文件.执行此功能1000次,时间不到一秒......但现在达到1分钟.
你怎么建议我解决这个问题?我是否更改了目录树结构?
我只需要快速访问这个庞大的文件池中的每个文件*
我有多个组来指定符号的关系..例如:
[A B C]
[A D E]
[X Y Z]
Run Code Online (Sandbox Code Playgroud)
这些组的含义是(对于第一组)符号A,B和C彼此相关.(第二组)符号A,D,E彼此相关......等等.
给定所有这些数据,我需要将所有唯一符号放入一维阵列中,其中彼此以某种方式相关的符号将彼此更靠近放置.鉴于上面的例子,结果应该是这样的:
[B C A D E X Y Z]
Run Code Online (Sandbox Code Playgroud)
要么
[X Y Z D E A B C]
Run Code Online (Sandbox Code Playgroud)
在这个结果数组中,由于符号A有多个关系(即一组中有B和C,另一组中有D和E),它现在位于这些符号之间,稍微保留了这种关系.
请注意,订单并不重要.在结果中,XYZ可以放在第一个或最后一个,因为这些符号与任何其他符号无关.然而,相关符号的接近程度是重要的.
我需要帮助确定一个采用符号关系组的算法,然后使用上面的逻辑输出一维数组.由于使用实际数据,关系组中符号的数量可以变化,关系组的数量也没有限制,符号可以与任何其他符号有关系,因此我不知道如何执行此操作.
为了进一步说明我的困境的棘手问题,如果你在上面的例子中添加另一个关系组.让我们说:
[C Z]
Run Code Online (Sandbox Code Playgroud)
结果现在应该是这样的:
[X Y Z C B A D E]
Run Code Online (Sandbox Code Playgroud)
请注意,符号Z和C现在更接近,因为它们的关系通过附加数据得到了加强.之前的所有关系仍保留在结果中.