2013-09-26 11 views
5

Niedawno odzyskałem tonę zdjęć z martwego dysku twardego znajomego i postanowiłem napisać program w języku Python do:Python 3. Należy napisać do pliku, sprawdzić, czy istnieje linia, a następnie ponownie napisać do pliku

Przejdź przez wszystkie pliki

sprawdzić ich md5sum

Sprawdź, czy md5sum istnieje w pliku tekstowym

Jeśli tak, daj mi znać z „duplikat stwierdzono "

Jeśli nie, dodaj MD5Sum do pliku tekstowego.

Ostatecznym celem jest usunięcie wszystkich duplikatów. Jednak po uruchomieniu tego kodu otrzymuję:

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

Czy robię to zupełnie źle, czy po prostu coś nie rozumiem?

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

O swojej wcięcia, cztery pomieszczenia jest lepsze do 8. Byłoby dużo łatwiej nam wszystkim jak dobrze czytać. Zobacz [PEP8] (http://www.python.org/dev/peps/pep-0008/#indentation). – RyPeck

Odpowiedz

3

Otwarto plik w trybie zapisu ('w') W swoim oświadczeniu with. Aby je otworzyć zarówno tryb pisania i czytania, zrobić:

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

Więc spróbowałem i nadal nie pisze. Dodałem niektóre instrukcje drukowania w moim kodzie i przejście do części, w której deklaruję md5 = str (hasher.hexdigest()) i ponownie uruchamia pętlę os.walk. – godofgrunts

+0

@godofgrunts Podwójne sprawdzenie wcięcia. To może być robienie rzeczy, których nie chcesz robić – TerryA

+0

Nie zamierzam powiedzieć, że jestem w 100% pewny, że moje wcięcie jest właściwe, ale jestem prawie pewien, że tak. – godofgrunts

Powiązane problemy