2016-07-20 7 views
0

Ich habe eine for-Schleife, die eine CSV von Werten mehrerer Dateien in einem Verzeichnis erstellt.Python: nur einmal in for Schleife ausführen

Innerhalb dieser Schleife möchte ich nur die Datei erstellen und, zur Zeit in der Kopfzeile einmal schreibe ich dies tue:

#name&path to table file 
    test = tablefile+"/"+str(cell[:-10])+"_Table.csv" 

    #write file 
    if not os.path.isfile(test): 
     csv.writer(open(test, "wt"))   
     with open(test, 'w') as output: 
      wr = csv.writer(output, lineterminator=',') 
      for val in header_note: 
       wr.writerow([val]) 

und Daten anhängen ich habe:

 with open(test, 'a') as output: 
     wr = csv.writer(output, lineterminator=',') 
     for val in table_all: 
      wr.writerow([val])  

Welche funktioniert Wenn ich das Skript jedoch ein anderes Mal erneut ausführe, fügt es weitere Daten an die Unterseite derselben .csv an. Was ich will, ist zum ersten Mal durch die for-Schleife, ist einfach zu überschreiben alle bestehenden .csv mit einem neuen mit einem Header dann weiter beim Anhängen von Daten und überschreiben/neu schreiben Header, sobald das Skript erneut ausgeführt wird. Vielen Dank!

Antwort

0

Es aussieht wie Sie als Datei-Handling einige Code-Probleme, die andere haben, aber hier geht: Sie Problem, dass in der Datei überschreibt alles eine Datei in 'w' Modus zu öffnen, und die Öffnung in 'a' Modus werden Sie nicht im Grunde erlauben Ändern Sie die Kopfzeile.

Um dies zu umgehen, müssen Sie den Inhalt der Datei (wenn es bereits existiert), dann überschreiben Sie die Datei, einschließlich der Zeilen, die dort zu beginnen.

Sie etwas entlang der Linien von möchten:

if os.path.exists(file_name):   # if file already exists 
    with open(file_name, 'r') as in_file: # open it 
    old_lines = in_file.readlines()[1:] # read all lines from file EXCEPT header line 

with open(file_name, 'w') as out_file: # open file again, with 'w' to create/overwrite 
    out_file.write(new_header_line)  # write new header line to file 
    for line in old_lines: 
    out_file.write(line)    # write all preexisting lines back into file 
    # continue writing whatever you want.