wie aus meinen vorherigen Beiträgen hervorgeht, versuch ich rein aus Interesse die Grundzüge des Programmierens zu lernen. Ein bisschen habe ich mich damit befasst, aber an den eigentlichen Kern, die Objektorientierung komme ich nicht richtig heran.
Für einen Bekannten habe ich ein Skript geschrieben, welches folgende Aufgabe lösen soll:
-----
Es existieren 2 Dateien, z.B. server.txt und db.txt. Diese enthalten jeweils eine Menge (ca. 4000) "Vorgang-ID's".
Als erstes sollen alle ID's gefunden werden, die nur in einer der beiden Dateien vorkommen. Ich nenne diese ID's "nohits".
In einem Verzeichnis liegen etliche Dateien, die diverse Informationen enthalten, darunter mindestens 1 Vorgangs-ID. Oft auch mehrere verschiedene ID's.
Dieses Verzeichnis soll nun durchsucht werden und alle Dateien, in denen mind. eine "nohit"-ID vorkommt sollen in eine Zip-Datei geschrieben werden.
-----
Mein Skript funktioniert, solange keine "ungewöhnlichen" Situationen auftreten. Sprich, ich habe keinerlei Exceptions etc. eingebaut. Das soll alles noch kommen. Was mir aus didaktischen Gründen viel wichtiger ist, ist die Objektorientierung. Deshalb wende ich mich mal wieder an Euch:
Habt ihr Anregungen, welche Klassen hier sinnvoll wären?
Ich möchte keine kompletten Lösungen, sondern nur Anregungen, die ich selbst umsetzen muss.
Zurzeit habe ich noch das Gefühl, dass hier Klassen etc. nicht sonderlich nützlich wären. Aber dies liegt vermutlich an meinem mangelnden Verständnis und der fehlenden Erfahrung...
Hier noch mein Skript:
Code: Alles auswählen
import re
import os
import zipfile
import time
## Verzeichnisse eingeben. Hier noch keine Pruefung auf Existenz
file1 = raw_input("Dateiname (1): ")
file2 = raw_input("Dateiname (2): ")
verzeichnis = raw_input("zu durchsuchendes Verzeichnis: ")
startzeit = time.time()
##Hier werden die Dateien zeilenweise in eine Liste eingelesen
t1 = (file(file1, 'r').readlines())
t2 = (file(file2, 'r').readlines())
##Mit der Mengenoperation Differenz der Daten ermitteln und als Liste speichern
nohits = list(frozenset(t1) - frozenset(t2))
##Etwas muehsames Konstrukt um die \n zu entfernen
nohit = []
for i in nohits:
nohit.append(re.sub('\n', '', i))
##eine leere Zip Datei wird im Ordner Report angelegt
os.chdir(verzeichnis)
os.mkdir('Report')
os.chdir('Report')
storage = zipfile.ZipFile('Mismatch.zip', 'w')
os.chdir(verzeichnis)
for datei in os.listdir(verzeichnis):
if os.path.isfile(datei):
f = file(datei, 'r')
inhalt = f.read()
f.close()
for i in nohit:
if i in inhalt:
storage.write(datei, os.path.basename(datei), zipfile.ZIP_DEFLATED)
storage.close()
zeit = int(time.time() - startzeit)
##Zusammenfassung:
print "---------------------------------------------"
print
print "%d Vorgangsnummern in %s" %(len(t1), file1)
print "%d Vorgangsnummern in %s" %(len(t2), file2)
print "%d unbearbeitete Vorgangsnummern" %len(nohits)
print "Die zugehoerigen Dateien wurden in der Datei"
print "Mismatch.zip im Unterordner Report gespeichert"
print
print "benoetigte Zeit", zeit, "Sekunden."
print "---------------------------------------------"
raw_input("")