python 合并上百个文件 memory error

我code的主要部分大概是这样importnumpyasnpfilenames=[os.path.join(corpus_path,fn)forfninsorted(os... 我code的主要部分大概是这样

import numpy as np
filenames = [os.path.join(corpus_path, fn) for fn in sorted(os.listdir(corpus_path))]

current_text = []

for filename in filenames:

inputtext = open(filename, 'r', encoding='utf-8')

current_text.append(inputtext.read())

alltext = np.append(current_text, '')

我打算用这段code把大约300个txt文档合并成一个文档,然后做下一步的处理。这些文档总共的大小是约220MB。我现在遇到的问题是,运行的时候报错说memory error。求问应该怎么解决?跪谢!
展开
 我来答
龙氏风采
推荐于2017-08-16 · 知道合伙人互联网行家
龙氏风采
知道合伙人互联网行家
采纳数:5849 获赞数:12817
从事互联网运营推广,5年以上互联网运营推广经验,丰富的实战经

向TA提问 私信TA
展开全部
通常不会遇到这个问题。python解决小问题不会有memory error

可能是使用了大对象也可能是使用了递归。没有合适规划临时或者是堆栈数据的数量。

那么有问题大部分是因为dict或者是list太大了。解决办法是使用优化过的数据结构,比如blist,或者是直接使用numpy的数组,array数据结构等等。

解决办法多。还可以使用64位版本。其实意义不大。python自己不需要管理大内存。也不需要大内存操作。

所以要用分布式架构解决问题。把问题分解成500MB以下的小问题,这样即使是32位的python也可以轻松完成。

内存管理的事情还是交给 C, C++这样的程序比较合适。2GB以下可以使用共享内存。 如果超过了,比如8,16, 96gb等。可以考虑使用数据库去管理。

如果你一定要用大对象也没有关系,其实效率也是挺高的。只是算法要优化。
lgao622
推荐于2016-06-20 · 知道合伙人软件行家
lgao622
知道合伙人软件行家
采纳数:1137 获赞数:6550
毕业于武汉工程大学邮电与信息工程学院通信专业,软件行业,4年工作经验。

向TA提问 私信TA
展开全部
你应该 读一个文件,就往要合并的文件里面写,不要全部放到内存;会导致内存占用过大,会出现程序崩溃的。
追问
所以具体code应该怎么写呢?
追答
filenames = [os.path.join(corpus_path, fn) for fn in sorted(os.listdir(corpus_path))]
outputtext = open("out.txt", 'w+')
for filename in filenames:
   inputtext = open(filename, 'r')
   outputtext.writelines(inputtext.readlines())
   inputtext.close()
outputtext.close()
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式