python运行内存不足_Python内存不足(使用后缀树)
我遇到了一些代码问题。请记住,我是一个糟糕的程序员,所以我的解决方案可能不是很有说服力(很可能是我内存不足的原因-我有4G字节,而脚本会慢慢填充它)。在
问题就在这里。我在一个目录里有大约3500个文件。每个文件由一行组成,其中可能包含相对较少或很多字符,没有空格(最小的文件为200字节,最大的为1.3兆字节)。我要做的是在这两个文件之间找到一个公共的子串,每次两个文件的长度是固定的(在下面的代码中是13个字符)。我一次做两个,因为我不是在所有的子串中寻找一个公共的子串,而是两个的组合,直到所有的文件都被比较过。一、 例如,文件之间任何一个固定长度的公共子字符串,而不是所有文件的公共子字符串。在
我使用一个后缀树模块来包装C实现(over here)。首先我列出目录中的所有文件,然后查找两个文件的组合,以便覆盖所有的组合,我一次将两个文件传递到后缀树,然后查找常见子字符串的序列。在
然而,我真的不知道为什么它慢慢地耗尽了记忆。我希望我们可以对代码做一个修改,这样它就可以以某种方式清除未使用的内存?显然3500个文件需要很长的时间来处理,但我希望这是可能的,不需要递增地填充4GB的内存。任何帮助将不胜感激!以下是我目前掌握的代码:from suffix_tree import GeneralisedSuffixTree
from itertools import combinations
import glob, hashlib, os
alist = open('tmp.adjlist', 'w')
def read_f(f):
f = open(f, "r")
s = str(f.readlines())
f.close()
return s
def read_gs(a,b):
s1 = read_f(a)
s2 = read_f(b)
print str(a) + ":" + str(hashlib.md5(s1).hexdigest()) + " --- " + str(b) + ":" + str(hashlib.md5(s2).hexdigest())
return [s1,s2]
def build_tree(s):
hlist = []
stree = GeneralisedSuffixTree(s)
for shared in stree.sharedSubstrings(13):
for seq,start,stop in shared:
hlist.append(hashlib.md5(stree.sequences[seq]).hexdigest())
hlist = list(set(hlist))
for h in hlist:
alist.write(str(h) + " ")
alist.write('\n')
glist = []
for g in glob.glob("*.g"):
glist.append(g)
for a,b in list(combinations(glist, 2)):
s = read_gs(a,b)
build_tree(s)
alist.close()
os.system("uniq tmp.adjlist network.adjlist && rm tmp.adjlist")
更新1
这是更新的代码。我补充了皮里斯提出的建议。然而,在jogojapan发现了C代码中的内存泄漏之后,考虑到这超出了我的专业知识范围,我最终采用了一种更慢的方法。如果有人在这方面有知识,我很想知道如何修改C代码来修复内存泄漏或释放函数,因为我认为Python的C后缀树绑定非常有价值。在没有后缀树的情况下,通过这个脚本运行数据可能需要几天的时间,所以我肯定愿意看看是否有人有创造性的修复!在
^{pr2}$
python运行内存不足_Python内存不足(使用后缀树)相关推荐
- python 去空_Python 内存分配时的小秘密
(给Python开发者加星标,提升Python技能) 作者:豌豆花下猫 (本文来自作者投稿) Python 中的sys模块极为基础而重要,它主要提供了一些给解释器使用(或由它维护)的变量,以及一些与解 ...
- python清空列表_Python 内存分配时的小秘密
(给Python开发者加星标,提升Python技能) 作者:豌豆花下猫 (本文来自作者投稿) Python 中的sys模块极为基础而重要,它主要提供了一些给解释器使用(或由它维护)的变量,以及一些与解 ...
- python全排列问题_Python基于回溯法子集树模板解决全排列问题示例
本文实例讲述了Python基于回溯法子集树模板解决全排列问题.分享给大家供大家参考,具体如下: 问题 实现 'a', 'b', 'c', 'd' 四个元素的全排列. 分析 这个问题可以直接套用排列树模 ...
- 郑州大学python程序设计试题_Python程序设计基础_智慧树章节测试题答案
Python程序设计基础_智慧树章节测试题答案 更多相关问题 [单选题]在人体生长发育过程中,可将哪一年龄段称为少年期 A. 12-16岁 B. 13~17 岁 C. 11-15岁 D. 10-14岁 ...
- 用python画树林_python实现画一颗树和一片森林
本文实例为大家分享了python画一颗树和一片森林的具体代码,供大家参考,具体内容如下 实现效果 代码在这里 from turtle import Turtle def tree(plist, l, ...
- python 内存溢出_python内存溢出
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 这里整理了一次内存泄漏的问题通常我们写python程序的时候也很少关注内存这个问 ...
- python中内存管理机制一共分为多少层_python 内存管理机制
内存管理机制 python中万物皆对象,python的存储问题是对象的存储问题,并且对于每个对象,python会分配一块内存空间去存储它 Python的内存管理机制:引入计数.垃圾回收.内存池机制 ...
- python idle编辑的代码文件拓展名是_Python IDLE编辑器打开后缀名为.py的文件
原博文 2020-04-08 17:56 − 在Windows操作系统下默认使用Python自带的IDLE编辑器打开后缀名为.py的文件. 1. win+R打开运行 2. 输入regedit,确定 3 ...
- python内存管理_Python内存管理(一):预备知识
一.内存的理解 你可以将计算机中的内存理解为一本为短期存储而设计的书.这本书中现在什么都没写,但最终不同的"作者"会来寻求空间,写入他们想写的故事. 由于他们之间不能彼此覆盖,他们 ...
- python 内存分析_python内存管理分析
本文较为详细的分析了python内存管理机制.分享给大家供大家参考.具体分析如下: 内存管理,对于Python这样的动态语言,是至关重要的一部分,它在很大程度上甚至决定了Python的执行效率,因为在 ...
最新文章
- Android -- TextView与EditText 同步显示
- 三步走——带你打造一份完美的数据科学家简历|(附件有PPT福利)
- 不存在完美的入门书,但是有些书在某些方面很惊艳
- Go 语言的包依赖管理
- 【2006-4】【木偶玩具】
- centos7查看当前系统时间、_CentOS7 设置系统时间
- 关于spring-mvc.xml的mvc:resources元素浅析。
- Windows7 IIS7.5 HTTP Error 503 The service is unavailable 另类解决方案
- 用LoadRunner实现接口测试
- C语言100ms周期运行时间不够,DEH-系统调研报告.docx
- web端文字转语音播放的几种方式
- Linux配置http代理(原理)
- 170816 Ubuntu-Nvidia CUDA+Driver+cuDNN installation-Titan Xp
- mysql gone away的几种原因
- 华为云服务器查看备份文件,云服务器备份文件
- 2023秋招--游卡--游戏客户端--一面面经
- QT实现固高运动控制卡示波器
- 树莓派模块化编程之TM1637驱动四位数码管
- python三种等待元素方法
- php通用图像处理库imagine使用