2016-07-08 6 views
0

i Python ziemlich neu bin und möchte einige Dateien von einem Ort zu einem anderen kopieren und einige Informationen in ihnen innerhalb einer MySQL-Datenbank zu speichern. Ich muss das Skript 2 mal ausführen, bis es funktioniert. Nach dem ersten Versuch stoppt es direkt nach der ersten Schleife. Wird es ein zweites Mal ausgeführt, ist alles zu Ende.Python-Skript endet zwischen 2 für Schleifen

import re, shutil, glob, os, MySQLdb 
db = MySQLdb.connect(host = "localhost",user = "root",passwd = "xxx",db = "test") 
x = db.cursor() 

delete = """DELETE FROM import WHERE fehler = '1'""" 
x.execute(delete) # clear the table 

dest = 'local' # paths 
path = 'local/*.txt' # paths 
files = glob.glob(path) # paths 

for orig in glob.glob(r'/mnt/sap01x/OUT/INT/success/*.txt'): 
    shutil.copy2(orig, dest) # copy all files from one to another dir 

for file in files: # starting to scan the files 
    f = open(file, 'r') 
    lines = f.read() 
    output = re.search(r'error', lines) # regexp to search for 'error' 
    if output: 
     query = """INSERT INTO import (Fehler,Filename) VALUES ("1","%s")""" 
      x.execute(query, file) # insert error to db 
      db.commit() 
      os.remove(file) # remove file 
    else: 
      os.remove(file) # remove file 

db.close() 

Kann jemand beraten, was ich falsch mache?

+5

Sie listen die Dateien, bevor Sie sie kopieren. Daher ist 'files' eine leere Liste. Entweder bewegt 'files = glob.glob (Pfad)' zwischen den beiden Schleifen oder, besser, einfach bauen eine Liste aller Dateien, die Sie in der ersten Schleife kopieren und verwenden, die in den zweiten ('files = []' vor dem erste Schleife, 'files.append (dest)' in der ersten Schleife. – spectras

+1

Als Nebenbemerkung, nie schließen Sie 'f' in Ihrer zweiten Schleife. Es wird beschädigt, wenn Sie zu viele Dateien in Ihrem Verzeichnis haben. – spectras

Antwort

0
files = glob.glob(path) 
for file in files: # starting to scan the files 
    with open(file, 'r') as f 
     lines = f.read() 
     output = re.search(r'error', lines) # regexp to search for 'error' 
     if output: 
      query = """INSERT INTO import (Fehler,Filename) VALUES ("1","%s")""" 
       x.execute(query, file) # insert error to db 
       db.commit() 
    os.remove(file) # remove file