2013-09-26 31 views
5

Gần đây tôi đã khôi phục một ảnh tấn từ ổ đĩa cứng của một người bạn và tôi quyết định viết chương trình trong python để:Python 3. Cần ghi vào một tệp, kiểm tra xem có tồn tại một dòng hay không, sau đó ghi vào tệp một lần nữa

Đi qua tất cả các file

Check md5sum của họ

Kiểm tra để xem nếu md5sum tồn tại trong một file văn bản

Nếu có, cho tôi biết với "DUPLICATE ĐÃ ĐƯỢC TÌM tHẤY "

Nếu không, hãy thêm MD5Sum vào tệp văn bản.

Mục tiêu cuối cùng là xóa tất cả các mục trùng lặp. Tuy nhiên, khi tôi chạy mã này, tôi nhận được thông tin sau:

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

Tôi làm điều này hoàn toàn sai hoặc tôi chỉ hiểu nhầm điều gì đó?

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') 
+0

Giới thiệu về thụt đầu dòng, bốn khoảng cách thích hợp hơn 8. Mọi thứ dễ đọc hơn. Xem [PEP8] (http://www.python.org/dev/peps/pep-0008/#indentation). – RyPeck

Trả lời

3

Bạn đã mở tập tin của bạn trong chế độ văn bản ('w') Trong tuyên bố with của bạn. Để mở cả chế độ viết và đọc, hãy làm:

with open('md5sums.txt', 'w+') as myfile: 
+0

Vì vậy, tôi đã thử điều đó và nó vẫn không viết. Tôi đã thêm một số lệnh in trong mã của tôi và nó đi xuống phần mà tôi khai báo md5 = str (hasher.hexdigest()) và bắt đầu lại os.walk cho vòng lặp. – godofgrunts

+0

@godofgrunts Kiểm tra kỹ thụt lề của bạn. Nó có thể làm những điều bạn không muốn làm – TerryA

+0

Tôi sẽ không nói rằng tôi chắc chắn 100% sự thụt đầu dòng của tôi là đúng, nhưng tôi chắc chắn nó là như vậy. – godofgrunts

Các vấn đề liên quan