小编Ben*_*tal的帖子

Python:数百万个小文件的读写速度慢

结论: 似乎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)
  • 关系数据库对于访问这些数据似乎太慢了,所以我选择了一种文件系统方法.
  • 我之前尝试过为这些执行linux控制台命令,但速度要慢一些.
  • 我首先将文件复制到临时文件然后访问/修改它然后将其复制回来,因为我发现这比直接访问文件更快.
  • 将所有文件放入1个目录(采用reiserfs格式)会导致访问文件时速度过慢.

我认为减速的原因是因为有大量的文件.执行此功能1000次,时间不到一秒......但现在达到1分钟.

你怎么建议我解决这个问题?我是否更改了目录树结构?

我只需要快速访问这个庞大的文件池中的每个文件*

python io file

14
推荐指数
3
解决办法
7954
查看次数

用于对数组中的符号进行排序同时通过顺序保留关系的棘手算法

问题

我有多个组来指定符号的关系..例如:

[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现在更接近,因为它们的关系通过附加数据得到了加强.之前的所有关系仍保留在结果中.

algorithm math graph

6
推荐指数
1
解决办法
406
查看次数

标签 统计

algorithm ×1

file ×1

graph ×1

io ×1

math ×1

python ×1