6

我最近从一个朋友的死硬盘中恢复了大量图片,我决定用 python 编写一个程序来:

浏览所有文件

检查他们的 MD5Sum

检查 MD5Sum 是否存在于文本文件中

如果是这样,请通过“已找到重复项”告诉我

如果没有,请将 MD5Sum 添加到文本文件中。

最终目标是删除所有重复项。但是,当我运行此代码时,我得到以下信息:

Traceback (most recent call last):
  File "C:\Users\godofgrunts\Documents\hasher.py", line 16, in <module>
    for line in myfile:
io.UnsupportedOperation: not readable

我这样做是完全错误的还是我只是误解了什么?

import hashlib
import os
import re

rootDir = 'H:\\recovered'
hasher = hashlib.md5()


with open('md5sums.txt', 'w') as myfile:
        for dirName, subdirList, fileList in os.walk(rootDir):            
                for fname in fileList:
                        with open((os.path.join(dirName, fname)), 'rb') as pic:
                                buf = pic.read()
                                hasher.update(buf)
                        md5 = str(hasher.hexdigest())
                        for line in myfile:
                                if re.search("\b{0}\b".format(md5),line):
                                        print("DUPLICATE HAS BEEN FOUND")
                                else:
                                        myfile.write(md5 +'\n')
4

2 回答 2

4

您已经在您的陈述中以书写模式 ( 'w')打开了您的文件。with要同时打开它的写作和阅读模式,请执行以下操作:

with open('md5sums.txt', 'w+') as myfile:
于 2013-09-26T01:12:35.017 回答
4

正确的模式是“r+”,而不是“w+”。

http://docs.python.org/3.3/tutorial/inputoutput.html#reading-and-writing-files

于 2013-09-26T20:22:13.713 回答