2016-03-26 15 views
1

Bu oldukça basit bir koddur - henüz Bilişim kursu için Charles Severances Python'u tamamladım, bu yüzden mümkünse lütfen bana basit bir şekilde yardımcı olun.Bir dosya ve dosya adlarına karşılık çift dosyaları denetleme

Yinelenen belgeleri klasörler içinde bulmaya çalışıyorum. Sorun yaşadığım şey orijinali ve çoğaltmayı yazdırmaktır, böylece bulduğu şeyin doğruluğunu el ile kontrol edebilirim. Daha sonra, çiftleri silme, diğer dosya türlerini vb. Otomatikleştirme hakkında daha fazla bilgi edinirim.

Benzer bir yapılandırılmış kod parçası itunes için iyi çalıştı, ama burada bir sözlüğü orijinal haline getiriyorum. bilgileri geri almamak.

Pls basit olsun, o yüzden öğrenebilirim. İşi yapmak için kodu kopyalayabilirim biliyorum, ama yanlış gittiğimi öğrenmeye daha çok ilgi duyuyorum.

şerefe jeff

import os 
from os.path import join 
import re 
import hashlib 
location = '/Users/jeff/desktop/typflashdrive' 
doccount = 0 
dupdoc = 0 

d = dict() 

for (dirname, dirs, files) in os.walk(location): 
    for x in files: 
     size = hashlib.md5(x).hexdigest() 
     item = os.path.join(dirname,x) 
     #print os.path.getsize(item), item 

     #size = os.path.getsize(item) 

     if item.endswith ('.doc'): 
      doccount = doccount + 1 
      if size not in d: 
       original = item 
       d[size] = original 
      else: 
       copy = item 
       for key in d: print key, d[size],'\n', size, copy,'\n','\n', 
       #print item,'\n', copy,'\n','\n', 
       dupdoc=dupdoc+1 
print '.doc Files:', doccount,'.', 'You have', dupdoc, 'duplicate .doc files:', 

cevap

2

Sizin en büyük hata yerine dosya içeriğinin dosya adları karmasını alıyorsun olmasıdır.

Bunun düzeltilmesi ve ayrıca kod kalanını temizlemiş: bunun için

import os 
import hashlib 


location = '/Users/jeff/desktop/typflashdrive' 
doc_count = 0 
dup_doc_count = 0 

hash_vs_file = {} 

for (dirname, dirs, files) in os.walk(location): 
    for filename in files: 
     file_path = os.path.join(dirname, filename) 
     file_hash = hashlib.md5(open(file_path).read()).hexdigest() 
     if filename.endswith('.doc'): 
      doc_count = doc_count + 1 
      if file_hash not in hash_vs_file: 
       hash_vs_file[file_hash] = [file_path] 
      else: 
       dup_doc_count += 1 
       hash_vs_file[file_hash].append(file_path) 

print 'doc_count = ', doc_count 
print 'dup_doc_count = ', dup_doc_count 

for file_hash in hash_vs_file: 
    print file_hash 
    for file_path in hash_vs_file[file_hash]: 
     print file_path 
    print "\n\n\n" 
+0

teşekkür ederiz. Bunu gözden geçireceğim ve düzenlemelerinizin nasıl değiştiğini göreceğim. Benim için yaptığınız çabayı çok takdir ediyorum. – Jeffnewy

+0

@Jeffnewy Sorununuzu çözdünüz mü? –

+0

Merhaba, aşağıdaki çıktı. Özgün kaydedilen dosya yolunu, çıkışta elle nasıl yazdırabilirim, böylece olası kopyaları elle karşılaştırabilirim. Açıkça farklı dosyaların neden aynı dosya-karma - tesadüf olduğunu emin değil misiniz? 969e5db7bd3d616f9e1d614dcfb73bf7 /Users/meltem/masaüstü/typflashdrive/Etkinlik Programı Yok Golf/May05/~ $ Oluşturma Programı Kültürel (May05) .doc /Users/meltem/masaüstü/typflashdrive/Etkinlik Programı Yok Golf/May05/~ $ -Creation Programlama için Spouses.doc /Kullanıcılar/jeff/desktop/typflashdrive/Etkinlik Programı Hayır Golf/May05/~ $ ge 1 Bu kılavuz hakkında hoş geldiniz doc.doc – Jeffnewy

İlgili konular