我看到这个问题已经被问了很多次在这个网站上,但我找不到一个符合我需要的答案。在
我需要做的是将一个非常长的文本文件(68000行)转换成python中的列表。整个文本文件的格式如下所示:
libertarians
liberticidal
liberticide
liberticide's
liberticides
我的最终目标是创建一个系统,用相应的字典值替换单词。例如dic['apple'、'pears'、'peaches'、'cats']。下面的代码不起作用,因为它生成的列表不能用在if-word-in-list:语句中。我试过了。在
^{pr2}$这是代码的全部内容,它作为检索列表的方法。在
with open('H:/Dropbox/programming/text compression/list.txt') as f:
thelist = f.readlines()
word = input()
if word in thelist:
print("hu")
else:
print("l")
输入“apple”的输出: 1
简言之,名单可以打印出来,但其他的几乎没有。在
最简单的方法:
68000行意味着几兆字节的距离,这在某些评论中是一种恐怖!-),在任何现代平台上,可用的虚拟内存都是giga字节(如果你在Commodore64上运行Python,那就不同了,但我相信你还有很多其他的问题:-). 在
readlines
方法在内部完成了其他方法需要显式执行的换行剥离,因此更可取(而且更快)。如果你需要一个单词列表的结果,无论如何,你也不可能通过零碎的方法来保存任何内存。在补充道:例如,在我的Macbook Air上
^{pr2}$所以超过了OP提到的三分之一。在这里
所以,有点超过2MB的200k字检查!因此,对于超过60万个单词,我推断出“一点超过6MB”远远地低于这个“勇敢的新世界”中可能导致
MemoryError
的数量(来自像我这样的老一辈人的观点:-)拥有许多千兆字节的机器(甚至手机,现在……:-)。在另外,不管怎样,如果这个单词列表被保存为一个单词列表,你不可能花费少于这几兆字节的内存!逐行读取文件,并巧妙地从需要的行子集中保留所需数据的子集,这是“完全错误的努力”,而您的目标实际上是在特定情况下保留每一行中的几乎所有文本(这正好符合Q的要求!)!-),只需使用
readlines
并完成它!-)在补充道:对Q的编辑使问题变得清晰(尽管问题中没有说明!)这些行必须在单词的右边包含一些空格,所以需要一个
rstrip
。即便如此,公认的答案也不是最优的。考虑以下文件i.py
:其中
assert
最后只验证了两种方法产生相同结果的事实。现在,在Macbook Air上…:我们可以看到,接受答案中的循环方法比列表理解要多花费40%的时间。在
试着这样做:
您也可以不必存储所有行,而是在运行中执行您的工作:
^{pr2}$相关问题 更多 >
编程相关推荐