Ich habe mit einem Kollegen zusammen für interne Zwecke ein kleines Script in Python geschrieben, welches leider noch einen Fehler hat. Ich muss dazu sagen, das wir beide komplette Python-Neulinge sind. Der Grund warum wir nun diese Sprache gewählt haben ist der, dass auf der Plattform schon Python verwendet wird und es sich so anbot. Ausserdem wollten wir beide auch mal was in Python machen
Nun, was macht das Script: Wir haben einen Ordner mit diversen Textdateien (bzw. XML) darin. Das Script soll dieses Verzeichnis durchkämmen und jede Datei nach bestimmten Inhalten. Sobald der gewünschte Inhalt gefunden wird (die Datei wird Zeile für Zeile durchgelesen), soll diese geschlossen und verschoben werden.
Das klappt auch ohne Probleme. Problematisch wird es bei den Dateien, die durch diesen Raster fallen. Diese sollten dann später geschlossen und verschoben werden. Bzw. habe ich versucht es mit einer Hilfsvariable zu lösen, die dauerhaft auf 0 ist (h = 0), nur bei positivem Durchlauf wird sie auf 1 gesetzt.
Unser Problem ist nun, dass die "fehlerhafte" Datei (sprich jene, in der nichts gefunden wurde) zwar im Zielordner auftaucht, aber nur als Kopie. Sie bleibt auch immer noch im Quellverzeichnis zurück.
Code: Alles auswählen
#Module importieren
import logging, shutil, glob, os, sys, time
#globale Variablen definieren
stamm_vz = 'C:\\Dev\\Import\\Stammdaten\\'
st_in = stamm_vz + 'In\\*.xml'
st_in_me = stamm_vz + 'In_me'
log_file = stamm_vz + 'Log_me\\multi_energy.log'
st_in_strom = stamm_vz + 'In_strom'
#Funktionen definieren
#Funktion Logging
def set_log():
logging.basicConfig(filename=log_file, level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
#Logdatei prüfen
def logdatei():
#Loggrösse prüfen
if os.path.isfile(log_file):
logsize = os.path.getsize(log_file)
else:
logsize = 1
if logsize > 2000000:
try:
#Datei löschen wenn grösser als 2 MB
shutil.copy(log_file, stamm_vz + 'Log_me\\archive\\multi_energy.log')
os.remove(log_file)
#Logdatei neu initialisieren
set_log()
logging.info('---------------------------------------------------------------------'.format(log_file))
logging.info('Analyse Stammdaten Multi Energie wird gestartet')
logging.info('Logformat wurde gesetzt und Logging wird begonnen')
logging.info('Logdatei war > als 2MB und wurde gelöscht')
except:
logging.info('Fehler - Logdatei konnte nicht gelöscht werden - Bitte überprüfen')
else:
set_log()
logging.info('---------------------------------------------------------------------'.format(log_file))
logging.info('Analyse Stammdaten Multi Energie wird gestartet')
logging.info('Logformat wurde gesetzt und Logging wird begonnen')
logging.info('Logdatei < 2 MB - Logdatei nicht gelöscht')
#Funktion Scan Stmmdatenverzeichnis
def scan_stvz():
#scan ob xml-Dateien vorhanden
if glob.glob(st_in):
#Datei öffnen
for i in glob.glob(st_in):
try:
file = open(i, 'r')
l = 0
for line in file:
#scan nach Gas oder Wasser MP
l = l + 1
if '<meteringcode>CH8' in line or '<meteringcode>CH7' in line:
l = str(l)
logging.info('Datei ' + os.path.basename(i) + ' Zeile ' + l + ' enthält Gas / Wasser Messpunkt' + line.rstrip())
file.close()
h = 1
try:
#Datei verschieben
#print(os.path.basename(i) + line.rstrip())
shutil.move(i, st_in_me)
logging.info('Stammdatenfile ' + os.path.basename(i) + ' erfolgreich verschoben')
break
except:
logging.info('Fehler - Stammdatendatei kann nicht verschoben werden')
else:
h = 0
# Der Fehler tritt hier auf.
if h == 0:
print(i)
file.close
#shutil.move(i, st_in_strom)
#logging.info(os.path.basename(i) + ' Stammdatendatei enthält keine Wasser / Gas Messpunkte -> für Stromimport verschoben')
#print(os.path.basename(i))
try:
#Datei verschieben
#print(os.path.basename(i) + line.rstrip())
shutil.move(i, st_in_strom)
logging.info(os.path.basename(i) + ' Stammdatendatei enthält keine Wasser / Gas Messpunkte -> für Stromimport verschoben')
break
except:
logging.info('Fehler - Stammdatendatei kann nicht verschoben werden -> '+st_in_strom)
except:
logging.info('Fehler - Stammdatendatei kann nicht geöffnet werden')
else:
logging.info('Keine Stammdatendateien vorhanden')
def main():
#Logging
logdatei()
#Scan Stmmdatenverzeichnis
scan_stvz()
#Programm beenden
logging.info('Stammdaten-Analyse erfolgreich ausgeführt')
sys.exit()
main()
Beste Grüsse
Yann