我遇到了一些代码问题。请记住,我是一个糟糕的程序员,所以我的解决方案可能不是很有说服力(很可能是我内存不足的原因-我有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内存不足(使用后缀树)相关推荐

  1. python 去空_Python 内存分配时的小秘密

    (给Python开发者加星标,提升Python技能) 作者:豌豆花下猫 (本文来自作者投稿) Python 中的sys模块极为基础而重要,它主要提供了一些给解释器使用(或由它维护)的变量,以及一些与解 ...

  2. python清空列表_Python 内存分配时的小秘密

    (给Python开发者加星标,提升Python技能) 作者:豌豆花下猫 (本文来自作者投稿) Python 中的sys模块极为基础而重要,它主要提供了一些给解释器使用(或由它维护)的变量,以及一些与解 ...

  3. python全排列问题_Python基于回溯法子集树模板解决全排列问题示例

    本文实例讲述了Python基于回溯法子集树模板解决全排列问题.分享给大家供大家参考,具体如下: 问题 实现 'a', 'b', 'c', 'd' 四个元素的全排列. 分析 这个问题可以直接套用排列树模 ...

  4. 郑州大学python程序设计试题_Python程序设计基础_智慧树章节测试题答案

    Python程序设计基础_智慧树章节测试题答案 更多相关问题 [单选题]在人体生长发育过程中,可将哪一年龄段称为少年期 A. 12-16岁 B. 13~17 岁 C. 11-15岁 D. 10-14岁 ...

  5. 用python画树林_python实现画一颗树和一片森林

    本文实例为大家分享了python画一颗树和一片森林的具体代码,供大家参考,具体内容如下 实现效果 代码在这里 from turtle import Turtle def tree(plist, l, ...

  6. python 内存溢出_python内存溢出

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 这里整理了一次内存泄漏的问题通常我们写python程序的时候也很少关注内存这个问 ...

  7. python中内存管理机制一共分为多少层_python 内存管理机制

    内存管理机制 ​python中万物皆对象,python的存储问题是对象的存储问题,并且对于每个对象,python会分配一块内存空间去存储它 ​Python的内存管理机制:引入计数.垃圾回收.内存池机制 ...

  8. python idle编辑的代码文件拓展名是_Python IDLE编辑器打开后缀名为.py的文件

    原博文 2020-04-08 17:56 − 在Windows操作系统下默认使用Python自带的IDLE编辑器打开后缀名为.py的文件. 1. win+R打开运行 2. 输入regedit,确定 3 ...

  9. python内存管理_Python内存管理(一):预备知识

    一.内存的理解 你可以将计算机中的内存理解为一本为短期存储而设计的书.这本书中现在什么都没写,但最终不同的"作者"会来寻求空间,写入他们想写的故事. 由于他们之间不能彼此覆盖,他们 ...

  10. python 内存分析_python内存管理分析

    本文较为详细的分析了python内存管理机制.分享给大家供大家参考.具体分析如下: 内存管理,对于Python这样的动态语言,是至关重要的一部分,它在很大程度上甚至决定了Python的执行效率,因为在 ...

最新文章

  1. Android -- TextView与EditText 同步显示
  2. 三步走——带你打造一份完美的数据科学家简历|(附件有PPT福利)
  3. 不存在完美的入门书,但是有些书在某些方面很惊艳
  4. Go 语言的包依赖管理
  5. 【2006-4】【木偶玩具】
  6. centos7查看当前系统时间、_CentOS7 设置系统时间
  7. 关于spring-mvc.xml的mvc:resources元素浅析。
  8. Windows7 IIS7.5 HTTP Error 503 The service is unavailable 另类解决方案
  9. 用LoadRunner实现接口测试
  10. C语言100ms周期运行时间不够,DEH-系统调研报告.docx
  11. web端文字转语音播放的几种方式
  12. Linux配置http代理(原理)
  13. 170816 Ubuntu-Nvidia CUDA+Driver+cuDNN installation-Titan Xp
  14. mysql gone away的几种原因
  15. 华为云服务器查看备份文件,云服务器备份文件
  16. 2023秋招--游卡--游戏客户端--一面面经
  17. QT实现固高运动控制卡示波器
  18. 树莓派模块化编程之TM1637驱动四位数码管
  19. python三种等待元素方法
  20. php通用图像处理库imagine使用

热门文章

  1. 史上最全自媒体推广工具
  2. [TF进阶] 卷积神经网络
  3. 一个基于百度云和图灵的人工智能程序
  4. 新浪微博开放平台中的Redis实践
  5. 开关电源Buck电路CCM和DCM工作模式
  6. SLAM学习 | 使用小觅相机MYNTEYE-S1030收集数据集
  7. java外文文库_java外文文献毕业设计
  8. Centos删除文件空间不释放怎么办
  9. Linux下显示IP地理位置信息的小工具—nali(很强大)
  10. macd java 源代码_改良智能MACD指标公式及源代码