【问题标题】:Editing large Python file consumes systems resources编辑大型 Python 文件会消耗系统资源
【发布时间】:2015-09-24 20:22:20
【问题描述】:

我正在创建一个包含 2,000 个字符串条目的列表变量的文件。

请注意,我不是在谈论何时运行代码,而是在我键入创建文件时,我的计算机是否开始占用大量内存。一旦我从第 6 行删除所有这些单词,就会清除。

我正在 IDLE 中编辑。 名单在这里:http://pastebin.com/uwpKriZ3

仅供参考

这里是简短的示例代码:

import random

# The following line is unwrapped and, in the actual script,
# contains 26431 characters comprising 2000 words:
list1 = ['aback', 'abaft', 'abandoned', 'abashed', 'aberrant', 'abhorrent', 'abiding']

rndword = random.choice(list1)
brokenword = list(rndword)

【问题讨论】:

  • 我们可以看看代码吗?
  • 你用什么电脑?您的脚本在我的机器上 [在 0.1 秒内完成]。
  • @matthias,不是我运行它的时候。只是当我在一个新文件中编写代码时,我的计算机冻结了
  • @clickhere 你用的是什么编辑器?这是一个编辑器有时可以使用的大文本文件。
  • 您的文本编辑器有缺陷。尝试使用较短的行,如下所示:pastebin.com/zqvizFSf

标签: python editor


【解决方案1】:

那个变量赋值行有 26431 个字符——长到足以让 emacs 运行缓慢。尝试执行查找/替换以将每个逗号替换为逗号后跟换行符。

大多数时候在编写实际程序时,如果需要加载大量数据,可以从文件中读取数据。在 python 中执行此操作:

#!/usr/bin/env python
import random
import io

list1 = [line.strip() for line in io.open('data.txt', 'r', encoding="utf-8-sig")]

rndword = random.choice(list1)
brokenword = list(rndword)
print(brokenword)

从外部来源读取数据会认识到数据和代码是不同的东西。它还鼓励代码可重用/泛化。例如,您可能会想出一个可以应用于不同数据集的有用算法。当您可以拥有一个无需修改即可提供不同数据的精美 Python 脚本时,为什么要将数据集直接放入源代码中呢?只需将代码和数据分开,您就会突然拥有更简洁、更可重用的代码。

【讨论】:

  • 如果open()语句打开文件时为什么不设置编码并避免显式解码?它还可以更好地使用 UTF-8 BOM。
  • @AlastairMcCormack 如果愿意,请编辑它!我知道我没有在如何使用 python 进行 I/O 方面树立一个很好的例子……
  • drop readlines() 这里没必要。将list() 放在[] 周围。
  • @AlastairMcCormack:open() 不使用 BOM。它默认使用locale.getpreferredencoding(False)。如果您知道该文件是 utf-8;您应该明确提供字符编码。
  • @AlastairMcCormack:要明确:如果文件有 BOM_UTF8,那么您希望 utf-8-sig 读取文件,否则 BOM 会留在流中。
猜你喜欢
  • 1970-01-01
  • 2013-07-20
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多