2017-02-22 2 views
0

Ich arbeite an einem Code, um ein Skript für mehrere Dateien in einem Ordner auszuführen. Ich bin in der Lage, den Code für jede Datei auszuführen, aber es speichert nur in einer Ausgabedatei und überschreibt dann diese Datei. Wie kann ich diesen Code erhalten, um die Ausgabe in separaten Dateien zu speichern? Vorzugsweise mit einem ähnlichen Namen wie jede Originaldatei. Das habe ich bisher.Python-Code für mehrere Dateien im Ordner ausführen und in separate Dateien schreiben

import os, re 
import pandas as pd 
directory = os.listdir('C:/Users/user/Desktop/NOV') 
os.chdir('C:/Users/user/Desktop/NOV') 

for file in directory: 
    df = pd.read_csv(file, index_col="DateTime", parse_dates=True) 
    df = df.resample('1min').mean() 
    df = df.reindex(pd.date_range(df.index.min(), df.index.max(), freq="1min")) 
    df.to_csv("newfile.csv", na_rep='NaN') 

Antwort

1

Nun, es wird natürlich immer in die gleiche Datei schreiben, weil Sie immer den gleichen Dateinamen in to_csv geben. Verwenden Sie os.path.basename Namen eine neue Datei auf Basis zu schaffen, auf dem alten, ohne Verlängerung:

df.to_csv(os.path.basename(file) + "-processed.csv", na_rep='NaN') 
1

Ändern Sie einfach den Dateinamen in der letzten Zeile in jeder Iteration der Schleife. Etwas wie for i, file in enumerate(directory): und dann df.to_csv("new_" + file + ".csv", na_rep='NaN') werden tun.

1

Mein Ansatz:

  • Verwendung glob.glob statt os.listdir Dateien herauszufiltern, die nicht csv Dateien
  • Führen Sie keine os.chdir, dies ist eine schlechte Praxis, weil andere Module möglicherweise nicht bewusst, dass Sie das aktuelle Verzeichnis geändert haben, auch Dir zweimal ändern als relative wird fehlschlagen, mit glob.glob ist nett, das zu vermeiden.
  • eine Datei mit dem gleichen Namen erstellen, aber mit "new_" Präfix im gleichen Verzeichnis (Lauf wird zweimal "new_new_ Datei erstellen, obwohl)

Code:

import os, re, glob 
import pandas as pd 

input_dir = 'C:/Users/user/Desktop/NOV' 

for file in glob.glob(os.path.join(input_dir,"*.csv")): 
    df = pd.read_csv(file, index_col="DateTime", parse_dates=True) 
    df = df.resample('1min').mean() 
    df = df.reindex(pd.date_range(df.index.min(), df.index.max(), freq="1min")) 
    new_filename = os.path.join(input_dir,"new_"+os.path_basename(file)) 
    df.to_csv(new_filename, na_rep='NaN') 
+0

Vielen Dank warum würde os.chdir als schlechte Praxis betrachtet werden? – acb

+0

sehe meine Bearbeitung. in Antwort hinzugefügt. –

0

‚Datei‘ haben Sie referenziert in Ihrer for-Schleife sollte die Zeichenfolge der Datei sein, die Sie in Ihrem Verzeichnis bearbeiten.

for file in directory: 
    print file 
    #oldfile.csv 

Sie können damit eine neue Datei mit einem Verweis auf das Original erstellen. So etwas wie dieses:

for file in directory: 
    df.to_csv("Output -" + file, na_rep='NaN') #make this the last line of your for-loop. 
    #File will be called 'Output - oldfile.csv'