小编JD9*_*951的帖子

处理文件时内存错误Python

我有一个备份硬盘驱动器,我知道有重复的文件分散在我周围,我认为这是一个有趣的项目编写一个小的python脚本来找到它们并删除它们.我编写以下代码只是为了遍历驱动器并计算每个文件的md5总和,并将其与我将称之为"第一次遇到"列表的内容进行比较.如果md5总和尚不存在,则将其添加到列表中.如果总和已存在,则删除当前文件.

import sys
import os
import hashlib

def checkFile(fileHashMap, file):
    fReader = open(file)
    fileData = fReader.read();
    fReader.close()
    fileHash = hashlib.md5(fileData).hexdigest()
    del fileData

    if fileHash in fileHashMap:
        ### Duplicate file.
        fileHashMap[fileHash].append(file)
        return True
    else:
        fileHashMap[fileHash] = [file]
        return False


def main(argv):
    fileHashMap = {}
    fileCount = 0
    for curDir, subDirs, files in os.walk(argv[1]):
        print(curDir)
        for file in files:
            fileCount += 1
            print("------------: " + str(fileCount))
            print(curDir + file)
            checkFile(fileHashMap, curDir + file)

if __name__ == "__main__":
    main(sys.argv)
Run Code Online (Sandbox Code Playgroud)

该脚本处理大约10Gb的文件,然后在'fileData = fReader.read()'行上抛出MemoryError.我认为,因为我在关闭fReader并在计算md5总和之后将fileData标记为删除,所以我不会遇到这个问题.如何在不遇到此内存错误的情况下计算md5总和?

编辑:我被要求删除字典并查看内存使用情况,以查看hashlib中是否存在泄漏.这是我运行的代码. …

python python-2.7

6
推荐指数
1
解决办法
1477
查看次数

标签 统计

python ×1

python-2.7 ×1