0

我正在制作一个程序,该程序将使用名为“name”的实例变量创建新对象。如果“name”没有传递到方法中,那么我的代码会从包含一组男性和女性姓名的文件中读取并选择一个。我的文件名为 names.txt,设置如下:

1. John, Alex, Adam, Matt, Sean, Max, . . .
2. John, Adam, Matt, Sean
3. Sarah, Mary, Alexa, Amy, Katie, . . .
4. Mary, Amy, Katie

该文件的组织结构使得第 1 行和第 3 行是该性别的人的所有可能名称的列表,而第 2 行和第 4 行列出了该性别尚未使用的名称。可以看出,第 1-2 行是男孩的名字,而第 3-4 行是女孩的名字。我计划使用此文件的方式是从第 2 行或第 4 行中选择一个可用名称(“读取”操作),然后重写没有该名称的行(“写入”操作)

既然我已经解释了这一点,这是我的问题:使用 python 能够对文件执行操作的方式,我最好有多个文件,每个文件有 2 条上述行或只有 1 行,还是更好有 1 个大文件?我所做的研究表明,即使要删除/重写一个名称,我也必须读取文件中的每一行,在内存中复制一份,然后在取出一个名称后完全重新输入所有数据。虽然我不打算有很多行文本,但我确实看到自己可能在这 4 行中的每一行上都有数百个名字。必须为内存中的所有数据创建空间,以便我可以从文件中删除一个名称,这似乎效率很低。我想做的另一件事是将数据分成 2 个或 4 个文件。在2个文件的情况下,我将在文件 1 上有第 1-2 行,在文件 2 上有第 3-4 行,并且必须处理我在上一段中提到的相同问题,除了规模较小(我需要担心的数据更少存储到内存中)。在 4 个文件的情况下,存储数据几乎没有问题,但现在我不得不担心维护和跟踪 4 个文件。在这样做时,我觉得我会更好地管理我的资源,但我会失去某种程度的组织,我觉得在一个文件中创建了所有 4 行。d 不得不担心维护和跟踪 4 个文件。在这样做时,我觉得我会更好地管理我的资源,但我会失去某种程度的组织,我觉得在一个文件中创建了所有 4 行。d 不得不担心维护和跟踪 4 个文件。在这样做时,我觉得我会更好地管理我的资源,但我会失去某种程度的组织,我觉得在一个文件中创建了所有 4 行。

所以我再次问:是有 1 个大文件来执行读/写操作更好,还是有多个文件更好,每个文件包含总数据的一个或两个段来执行操作?

感谢您的回复!

-Max,一个有抱负的 Python 程序员

附言。这是我的第一篇文章,我不确定我提供的信息是否太多或不够,如果可以的话,请提供反馈!

4

1 回答 1

0

我不会太担心一个大文件的效率低下。

慷慨地假设平均名称长度为 10 个字符和 10.000 个名称,您仍然在 100Kb 远低于计算机中当前的内存水平。

实际上,您不必完全写出文件,一方面您可以在一次读取名称的同时写入新文件,然后在完成后删除原始文件并将新文件重命名为原始文件。这基本上就是旧计算机如何通过小内存和磁带操作(在排序时写入新磁带等)来做到这一点。

如果您只是想要更高的效率,而不需要使用数据库的开销,您可以考虑以下几点:

  • 不要使用文本文件,而是将名称保存为字典,并以腌制形式保存为 python 列表。这应该加快读取和转储数据的速度。但是检查生成的文件并不容易。
  • 如果您想坚持使用可读文本,请考虑不要,在名称之间添加,而是在每个名称之后使用,(逗号+空格),或者在每个名称之后.使用(点+空格),具体取决于名称是否被使用。如果您打开文件"w+"并在使用名称时将名称后的逗号重写为句点。这比重写文件效率更高,而且您的文件效率更高,因为您不会将未使用的名称加倍。
于 2013-04-01T05:53:14.137 回答