Python:从文本文件中剥离行的最有效方法

时间:2012-06-01 02:09:03

标签: python string list

如何进行for循环并更改列表中的条目?比如,等同于[line.strip() for line in lines],但line.strip()被保存回行列表。

这是必需的,因为我使用的是存储在列表中的大型数据集。该数据集将用于机器训练以训练分类器。具体来说,使用NLTK lib进行自然语言处理。因此,重复数组是不可行的。

4 个答案:

答案 0 :(得分:1)

使用生成器表达式,然后不会同时保留所有行。

glines = (line.strip() for line in lines)

答案 1 :(得分:1)

是否要将结果存储到同一个实例lines中(不能替换为新的列表实例)?

lines[:] = [line.strip() for line in lines]

答案 2 :(得分:1)

如果我理解正确,您正试图从文件中删除行,而不是创建一个全新的列表。问题是在Python strings are immutable中,所以你不能修改字符串,你必须创建一个新字符串。

正如其他人所建议的那样,生成器表达式将根据需要生成剥离的字符串,而不是将它们全部存储在新列表中,从而减少内存需求。如果确实想要删除字符串,那么这样的事情就可以完成:

for i, line in enumerate(lines): lines[i] = line.strip()

但是,无论如何,创建新列表可能会更快。

答案 3 :(得分:0)

这个怎么样:

lines = [line.strip() for line in lines]

创建另一个列表(尽管它全部存储在内存中,这可能是很多行的问题)。

或者,您可以使用generator expression来避免潜在的内存问题,只需按需创建行:

lines = (line.strip() for line in lines)