hrx

Provjera slijeda datoteka

hrx
Dec 12th, 2011
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.84 KB | None | 0 0
  1. import glob
  2.  
  3.  
  4. # Funkcije za prirodno sortiranje imena datoteka
  5. def try_int(s):
  6.     "Convert to integer if possible."
  7.     try: return int(s)
  8.     except: return s
  9.  
  10. def natsort_key(s):
  11.     "Used internally to get a tuple by which s is sorted."
  12.     import re
  13.     return map(try_int, re.findall(r'(\d+|\D+)', s))
  14.  
  15. def natcmp(a, b):
  16.     "Natural string comparison, case sensitive."
  17.     return cmp(natsort_key(a), natsort_key(b))
  18.  
  19. def natcasecmp(a, b):
  20.     "Natural string comparison, ignores case."
  21.     return natcmp(a.lower(), b.lower())
  22.  
  23. def natsort(seq, cmp=natcmp):
  24.     "In-place natural string sort."
  25.     seq.sort(cmp)
  26.  
  27. def natsorted(seq, cmp=natcmp):
  28.     "Returns a copy of seq, sorted by natural string sort."
  29.     import copy
  30.     temp = copy.copy(seq)
  31.     natsort(temp, cmp)
  32.     return temp
  33.  
  34.  
  35. # Funkcija za usporedbu i preimenovanje datoteka, ujedno glavna funkcija programa
  36. def provjera():
  37.  
  38.     ispisNaEkran = 0                              # Ako zelis ispis razlika u imenima na ekranu, stavi 1 umjesto 0 (napredak se uvijek ispisuje)
  39.  
  40.     outFile = open('./provjera.txt', 'w')     # Stvaranje i otvaranje datoteke za pohranu rezultata
  41.    
  42.     ekstenzija=".txt"                             # Ekstenzija datoteka koje se provjeravaju
  43.     skupDatoteka=glob.glob("*"+ekstenzija)        # Dohvati sve datoteke u trenutnom direktoriju s odabranom ekstenzijom
  44.     natsort(skupDatoteka)                         # Prirodno sortiraj dohvacene datoteke
  45.  
  46.     totalNum=len(skupDatoteka)                    # Ukupni broj datoteka
  47.     msg="Ukupno za provjeru: " + str(totalNum) + " datoteka\n"  # Poruka
  48.     print(msg)                                    # Ispis na stdout
  49.     outFile.write(msg+"\n")                       # Ispis u datoteku
  50.  
  51.     index=0                                       # Indeks pojedine datoteke u skupu datoteka
  52.     thresh=0.2                                    # Prag za ispis poruke o napretku        
  53.  
  54.     for datoteka in skupDatoteka:                 # Petlja - za sve datoteke u skupu datoteka
  55.         if index>0:                               # Ako datoteka nije prva datoteka
  56.  
  57.             a=datoteka.split(".")                 # Odvoji ekstenziju od imena datoteke
  58.             trenutnaDatoteka=a[0].split("_")      # Odvoji prvi dio imena datoteke od broja datoteke (drugog dijela)
  59.                
  60.             b=skupDatoteka[index-1].split(".")    # Odvajanje ekstenzije i
  61.             prethodnaDatoteka=b[0].split("_")     # dijelova za datoteku prije trenutne
  62.  
  63.             # Ako prethodna datoteka nema drugog dijela, prvi dijelovi imena su isti, a drugi dio imena trenutne datoteke nije _2
  64.             if ((len(trenutnaDatoteka)>1) and
  65.                 (len(prethodnaDatoteka)==1) and
  66.                 (trenutnaDatoteka[0]==prethodnaDatoteka[0]) and
  67.                 (trenutnaDatoteka[1]!="2")
  68.                 ):
  69.                 # Ispisi ime datoteke koja nedostaje
  70.                 msg="Slijed " + prethodnaDatoteka[0] + " ne zapocinje datotekom " + prethodnaDatoteka[0] + "_2" + ekstenzija    #Poruka
  71.                 if ispisNaEkran : print(msg)      # Ispis na stdout
  72.                 outFile.write(msg+"\n")           # Ispis u datoteku
  73.                            
  74.             # Ako drugi dijelovi imena datoteka postoje, prvi dijelovi trenutne i prethodne datoteke su jednaki, a drugi dijelovi van slijeda
  75.             if ((len(trenutnaDatoteka)>1) and
  76.                 (len(prethodnaDatoteka)>1) and
  77.                 (trenutnaDatoteka[0]==prethodnaDatoteka[0]) and
  78.                 (trenutnaDatoteka[1]!=str(int(prethodnaDatoteka[1])+1))
  79.                ):    
  80.                 # Ispisi poruku koje se datoteke razlikuju
  81.                 msg="Razlika u slijedu kod datoteke: " + datoteka + " - prethodna datoteka je " + skupDatoteka[index-1]     # Poruka
  82.                 if ispisNaEkran : print(msg)      # Ispis na stdout
  83.                 outFile.write(msg+"\n")           # Ispis u datoteku
  84.  
  85.  
  86.         index+=1                                  # Indeks se povecava za jedan
  87.        
  88.         #Ispis napretka svakih 20 posto
  89.         if round(float(index)/float(totalNum),5)>thresh :
  90.             msg="\nProvjereno " + str(index) + " od " + str(totalNum) + " datoteka\n"   # Poruka
  91.             print(msg)                            # Ispis na stdout
  92.             outFile.write(msg+"\n")               # Ispis u datoteku
  93.             thresh+=thresh                        # Novi prag
  94.            
  95.     msg="\nProvjera gotova\n"
  96.     print(msg)                                    # Ispis na stdout
  97.     outFile.write(msg+"\n")                       # Ispis u datoteku
  98.     outFile.close()                               # Zatvaranje i spremanje datoteke s rezultatima
  99.  
  100.  
  101. if __name__ == "__main__":                        # Ako se modul pokrece samostalno,
  102.     provjera()                                    # funkcija provjera() je glavna funkcija
Advertisement
Add Comment
Please, Sign In to add comment