Ich habe ein Programm geschrieben, das eine CSV-Datei liest und den Inhalt als INSERT-Anweisungen ausgibt. Ich schrieb dann ein Ausführungsprogramm, das die Ausgabe des CSV-Parser-Programms nehmen und in eine TXT-Datei schreiben sollte, aber anstatt die gesamte Ausgabe zu schreiben, schreibt es nur die erste Anweisung. HierAusgabe von Python-Programm in TXT-Datei schreiben
ist der Code für den Vollstrecker:
import sys
with open('insert.txt', 'wb') as f:
subprocess.check_call(["python", "CSVParserMultiple.py"], stdout=f)
Und der Code für den Parser:
import csv, os
path = 'C:/Users/user/Desktop/test/'
for file in os.listdir(path):
if file.endswith('.csv'):
# print ('Parsing file: ' + os.path.basename(path + file))
openFile = open(path + file)
csvFile = csv.reader(openFile)
getHeader = next(csvFile)
columnHeaders = map((lambda x: "'" + x + "'"), getHeader[:-1])
insert = 'INSERT INTO testing (' + "'ID', 'VehicleID', " + ', '.join(columnHeaders) + ') VALUES '
for row in csvFile:
values = map((lambda x: "'" + x.strip() + "'"), row[:-1])
print (insert + "(" + ", ".join(values) + ");")
openFile.close()
ich nicht ganz sicher bin, dass es sinnvoll, sie als zwei separate Programme zu haben, macht aber ich konnte sie nicht dazu bringen, als definierte Funktionen in demselben Programm für das Leben von mir zu laufen. Wie kann ich das Ausführungsprogramm dazu bringen, alle Zeilen des Parser-Programms anstatt nur einer einzigen Zeile auszugeben? Und wie kann ich sie zu einem Programm kombinieren?
Sie sollten diese Operationen in Funktionen einfügen. Wenn Sie Module wiederverwenden und sie aus anderen Skripts aufrufen möchten, müssen Sie sie installieren, indem Sie ein Python-Paket/Modul erstellen. –
Aufruf einer Python-Datei über Subprozess ist ziemlich lächerlich. Tu das nicht. Wenn Sie * es * trennen müssen und eine andere Funktion nicht gut genug ist, erstellen Sie ein eigenes Modul (https://docs.python.org/3/tutorial/modules.html) –
Nicht sicher Warum erscheint nur die erste Zeile in der Ausgabedatei? Um jedoch die beiden Skripte zu kombinieren, setzen Sie einfach die Anweisung 'with open' in das zweite Skript und verwenden Sie' f.write ('something \ n') 'anstelle von' print'. –