Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我想在1GB的文本文件中存储不同类别的数据???(从某种意义上说,数据是输入数据(纯文本)),我想存储并访问它_Python - Fatal编程技术网

Python 我想在1GB的文本文件中存储不同类别的数据???(从某种意义上说,数据是输入数据(纯文本)),我想存储并访问它

Python 我想在1GB的文本文件中存储不同类别的数据???(从某种意义上说,数据是输入数据(纯文本)),我想存储并访问它,python,Python,我们的项目是创建类似stack overflow网站的讨论论坛。但它是python中的命令行应用程序。我们只需要使用1GB空间的文本文件来存储所有信息(我不想使用外部依赖项)。我们的讨论论坛包含6个类别。所以我有一个想法,如果我把文件分成块,那么我可以在每个块中存储每个类别的数据。如果我这样存储,如何访问它。如果我出错了,请告诉我正确的方法,并且要快。我建议再创建一个索引文件,以便快速访问特定的帖子。索引项应具有以字节为单位的恒定长度,并且应为快速查找对项进行排序。对于索引文件中的每个条目,您需

我们的项目是创建类似stack overflow网站的讨论论坛。但它是python中的命令行应用程序。我们只需要使用1GB空间的文本文件来存储所有信息(我不想使用外部依赖项)。我们的讨论论坛包含6个类别。所以我有一个想法,如果我把文件分成块,那么我可以在每个块中存储每个类别的数据。如果我这样存储,如何访问它。如果我出错了,请告诉我正确的方法,并且要快。

我建议再创建一个索引文件,以便快速访问特定的帖子。索引项应具有以字节为单位的恒定长度,并且应为快速查找对项进行排序。对于索引文件中的每个条目,您需要:唯一标识符、偏移量(只需在数据文件上处理好旧的fseek)和文章长度。因为不会对数据文件执行复杂的搜索,只需fseek X字节和read Y字节,所以您可以安全地对数据文件中的每个post进行压缩(例如,使用gzip)

<> P>另一件事你必须考虑的是,帖子可能会改变或张贴后它们是不可变的吗?如果可以更改/编辑/删除它们,则必须对数据文件进行碎片整理和重新索引,因为:

  • 特定职位的长度可能会增加,需要移动其之后存储的所有职位
  • 特定帖子的长度可能会减少,从而在数据文件中留下小间隙
  • 帖子可能会被删除,在数据文件中留下很大的空白
  • 由您选择策略:

  • 不断增长的帖子可能会保留在原来的位置,从而触发在它之后存储的帖子的立即移动,并至少部分地重新编制索引,或者它可能会被移动到文件的末尾,在它以前的位置上暂时留下一个间隙
  • 可以通过立即进行碎片整理和重新编制索引来消除间隙,也可以定期安排此任务

  • 你的论坛大约有6个类别:类别可以通过前3位(最多可以区分8个类别)或更安全的4位(最多16个类别)来区分。数据文件中块的长度保持不变不是一个好主意,因为类别可能包含非常不同的内容量。此外,它对查找没有多大帮助。

    有代码吗?到目前为止你们有什么?不,我们有一个不使用数据库的限制@AshwiniChaudhary@user1922399“若我出错了,请引导我找到正确的方法”-正如Ashwini提到的,正确的方法是使用数据库。@PeterVaro我尝试使用seek()函数在每个索引的开始索引和结束处保留分隔符。如果我这样做的话,它从头到尾都是以一行代码的形式读取整个数据:f=open(“test1.txt”,“wb”)f.write(“users@”)u_space=100*1024*1024 f.seek((u_space)-14)f.write(“users@\n”),我不想使用数据库:(我理解不使用数据库的原因。@user1022399详细地说数据库不是一个选项。我猜他在期待关于搜索大文件的提示。