Zeilen nach Datum löschen und Dateinamenspalte für mehrere CSV hinzufügen

Ich habe mehrere "," abgegrenzte csv-Dateien mit aufgezeichneten Wasser-Rohr-Drucksensor-Daten, die bereits nach Datum älter-neuer sortiert sind. Für alle Originaldateien enthält die erste Spalte immer Termine, die als YYYYMMDD formatiert sind. Ich habe ähnliche Diskussionsfäden angesehen, konnte aber nicht finden was ich brauche.

  1. Python-Skript, um eine neue Spalte zu jeder csv-Datei im Verzeichnis hinzuzufügen, wobei jede Zeile der neuen Spalte, die als "Pipe" bezeichnet wird, einen Dateinamen haben würde, wobei die Dateierweiterungszeichenfolge ausgelassen wird.

  2. Haben Sie die Möglichkeit, ein Cut-off-Datum als YYYYMMDD anzugeben, um Zeilen in der ursprünglichen Eingabedatei zu löschen. Zum Beispiel, wenn einige Datei Daten hat 20140101 bis 20140630, würde ich gerne ausgeschnitten Zeilen von Daten, wenn ihr Datum ist <20140401.

  3. Haben Sie die Möglichkeit, entweder die ursprünglichen Dateien zu überschreiben, nachdem Sie diese Änderungen vorgenommen haben oder speichern Sie jede Datei in einem anderen Verzeichnis, mit Dateinamen wie die Originale.

Eingabe: PipeRed.csv; Header: Datum, Druck1, Pressure2, Temperatur1, Temperatur2 usw.,

Ausgabe: PipeRed.csv; Headers: Pipe, Date, Pressure1, Pressure2, Temperatur1, Temperatur2, etc,

Ich habe etwas Code gefunden und es ein wenig modifiziert, aber es löscht keine Zeilen wie oben beschrieben und fügt die Dateinamen Spalte zuletzt statt 1. hinzu.

import csv import sys import glob import re for filename in glob.glob(sys.argv[1]): #def process_file(filename): # Read the contents of the file into a list of lines. f = open(filename, 'r') contents = f.readlines() f.close() # Use a CSV reader to parse the contents. reader = csv.reader(contents) # Open the output and create a CSV writer for it. f = open(filename, 'wb') writer = csv.writer(f) # Process the header. writer = csv.writer(f) writer.writerow( ('Date','Pressure1','Pressure2','Pressure3','Pressure4','Pipe') ) header = reader.next() header.append(filename.replace('.csv',"")) writer.writerow(header) # Process each row of the body. for row in reader: row.append(filename.replace('.csv',"")) writer.writerow(row) # Close the file and we're done. f.close() 

  • Konvertieren Sie JSON-Datumsstring in Python datetime
  • Python OrderedDict nach Datum sortiert
  • Tool / Bibliothek für die Berechnung von Intervallen wie "letzten Donnerstag des Monats"
  • Problem beim Schreiben einer Funktion, die bestimmt, ob ein Datum in der Zukunft ist
  • Einstellen des Systemdatums in Python (unter Windows)
  • Berechnen Hebräisch Datum in Python
  • Datumsformat ändern beim Import aus CSV
  • Wie führe ich zwei Listen von Daten in eine Reihe von Datumsintervallen?
  • One Solution collect form web for “Zeilen nach Datum löschen und Dateinamenspalte für mehrere CSV hinzufügen”

    Diese Funktion sollte sehr nah sein, was Sie wollen. Ich habe es in beiden Python 2.7.9 und 3.4.2 getestet. Die erste Version, die ich gepostet habe, hatte einige Probleme, denn – wie ich schon erwähne – war es ungetestet. Ich bin nicht sicher, ob Sie Python 2 oder 3 verwenden, aber das funktionierte richtig in einem.

    Eine andere Änderung von der vorherigen Version ist, dass der Name des optionalen Keyword-Datums-Arguments von cutoff_date zu start_date geändert wurde, um besser zu reflektieren, was es ist. Ein Cutoff-Datum bedeutet in der Regel das letzte Datum, an dem es möglich ist, etwas zu tun – das Gegenteil von der Art, wie du es in deiner Frage benutzt hast. Beachten Sie auch, dass jedes Datum ein String, dh start_date='20140401' , nicht als Ganzzahl.

    Eine Erweiterung ist, dass es nun das Ausgabeverzeichnis erstellen wird, wenn einer angegeben ist, aber noch nicht existiert.

     import csv import os import sys def open_csv(filename, mode='r'): """ Open a csv file in proper mode depending on Python verion. """ return (open(filename, mode=mode+'b') if sys.version_info[0] == 2 else open(filename, mode=mode, newline='')) def process_file(filename, start_date=None, new_dir=None): # Read the entire contents of the file into memory skipping rows before # any start_date given (assuming row[0] is a date column). with open_csv(filename, 'r') as f: reader = csv.reader(f) header = next(reader) # Save first row. contents = [row for row in reader if start_date and row[0] >= start_date or not start_date] # Create different output file path if new_dir was specified. basename = os.path.basename(filename) # Remove dir name from filename. output_filename = os.path.join(new_dir, basename) if new_dir else filename if new_dir and not os.path.isdir(new_dir): # Create directory if necessary. os.makedirs(new_dir) # Open the output file and create a CSV writer for it. with open_csv(output_filename, 'w') as f: writer = csv.writer(f) # Add name of new column to header. header = ['Pipe'] + header # Prepend new column name. writer.writerow(header) # Data for new column is the base filename without extension. new_column = [os.path.splitext( os.path.split(basename)[1] )[0]] # Process each row of the body by prepending data for new column to it. writer.writerows((new_column+row for row in contents)) 
    Python ist die beste Programmiersprache der Welt.