ich brauche Eure Hilfe, da mir die Ideen ausgehen. Mein Problem liegt in der der Programmlogik, speziell beim Schreiben von einer CSV-Datei. Ausgangssituation ist das ich SQL-Abfragen mache und die in eine csv-Datei schreiben möchte. Diese csv-Datei soll dann per Mail versendet werden. Dies klappt auch alles, jedoch erhalte ich niemals alle Zeilen der scv-Datei per Mail. Am Anfang dachte ich das die Mail-Fkt. nicht in Ordnung ist, bis ich einen Zähler eingebaut habe und feststellen muuste das die letzten Zeilen erts in die Datei geschrieben werden wenn die Mail schon versendet wurde. Dies kann aber eigentlich gar nicht sein, daher bin ich jetzt leicht konfus

Hier sind meine Funktionen, vielleicht sieht einer von euch den Fehler

Code: Alles auswählen
def main():
"""Hauptfunktion"""
#
try:
if len(sys.argv) != 4:
help()
sys.exit(2)
else:
str_name = sys.argv[2]
recipient =sys.argv[3]
opts, args = getopt.getopt(sys.argv[1:], "hrbs", ["help", "room", "building", "site"])
for o, a in opts:
if o in ("-h", "--help"):
help()
sys.exit(0)
if o in ("-r", "--room"):
db_connect()
get_oneRoom(str_name)
db_close()
print zaehler
send_CSV(str_mailtext, csvFile, recipient)
sys.exit(0)
if o in ("-b", "--building"):
db_connect()
get_allFromHouse(str_name)
db_close()
send_CSV(str_mailtext, csvFile, recipient)
sys.exit(0)
if o in ("-s", "--site"):
db_connect()
get_allRooms(str_name)
db_close()
send_CSV(str_mailtext, csvFile, recipient)
sys.exit(0)
else:
print "Zu viele, oder falsche Argumente uebergeben"
sys.exit(1)
except getopt.GetoptError:
# print help information and exit:
print "Falsche Parameter uebergeben. Bitte nutzen Sie den Parameter -h fuer die richtige Syntax"
sys.exit(2)
def start_CSV(str_name):
""" Funktion start_CSV: definiert globale Variablen und gibt csv-File-Handler """
#
global csvFile
csvFile = "/tmp/%s.csv" %str_name
csv.register_dialect("excel", delimiter=";", quoting=csv.QUOTE_MINIMAL)
global writer # definiert die Variable global, fuer die Verwendung in Fkt.write_CSV
try:
writer = csv.writer(open(csvFile, "wb"), dialect="excel")
except csv.Error, e:
sys.exit('file %s: %s' % (csvFile, e))
def get_oneRoom(str_name):
#
#
start_CSV(str_name)
count=0
#print " Eingeben wurde Raum: %s " % str_name
cursor.execute("SELECT DISTINCT a.id FROM configitem AS a INNER JOIN configitem_version AS b ON a.id = b.configitem_id where b.name like '%s'" % str_name )
room_id = cursor.fetchall()
for a in room_id:
count=count+1
if count == 1:
print "Der Raum %s wurde gefunden. Die ID lautet: %s" % (str_name, a)
get_Details(str_name,a)
else:
error(str_name)
#
def get_Details(raumname, b):
#
print "%s" % b
cursor.execute(" SELECT source_key from link_relation where target_key = '%s' AND target_object_id=4" % b)
itemlist = cursor.fetchall()
#print " Die CI-Objecte zum Raum %s lauten:" % raumname
results = []
for c in itemlist:
d = int(c[0]) # print type(d)
cursor.execute("SELECT DISTINCT a.id AS ID,a.configitem_number AS CiNumber, a.class_id as Devicegroup, a.last_version_id, b.name as Bezeichnung FROM configitem AS a INNER JOIN configitem_version AS b ON a.id = b.configitem_id where a.id = '%d' order by b.create_time desc limit 1" % d )
while(1):
raumobjekt = cursor.fetchone()
if raumobjekt == None:
break
i = int(raumobjekt[3])
for s in searchparams:
cursor.execute("select xml_content_value from xml_storage where xml_key = '%s' AND xml_content_key like '%s'" % (i,s) )
while(1):
invnumber = cursor.fetchone()
if invnumber == None:
break
results.append(invnumber[0])
results.insert(1,raumobjekt[1])
results.insert(2,raumobjekt[4])
write_CSV(results, raumname)
results = []
#
def write_CSV(results, location):
#zaehler = zaehler+1
rowresult=[]
for i in results:
p = re.compile('[0-9]{9,}')
m = p.match(i)
if m:
# schreibt die CI-Nummer
rowresult.append(i)
# print ('match found: ', m.group())
else:
rowresult.append(i)
rowresult.append(location)
writer.writerow(rowresult)