Brauchen Sie Hilfe, um verarbeitete mdb-Datei in Python auf Linux-Maschine zu sortieren

Ich versuche, eine Tabelle aus der .mdb-Datei zu extrahieren, dann diese Tabelle zu filtern und das Ergebnis in eine kurze CSV-Datei auszuspucken. Bisher konnte ich den Tisch extrahieren und den Inhalt in .CSV speichern. Aber ich weiß nicht, wie kann ich diese Daten sortieren und die notwendigen Zeilen extrahieren, die ich brauche. Ich glaube, ich könnte die ganze .csv speichern und dann wieder öffnen, aber es würde viel Platz benötigen, da ich ca. 2000 mdb Dateien verarbeiten muss. Ich möchte nur bestimmte Zeilen extrahieren.

Cycle Test_Time Current Voltage 1 7.80E-002 0.00E+000 1.21E-001 1 3.01E+001 0.00E+000 1.19E-001 1 6.02E+001 0.00E+000 1.17E-001 2 9.02E+001 0.00E+000 1.14E-001 2 1.20E+002 0.00E+000 1.11E-001 2 1.50E+002 0.00E+000 1.08E-001 2 1.80E+002 0.00E+000 1.05E-001 2 2.10E+002 0.00E+000 1.02E-001 3 2.40E+002 0.00E+000 9.93E-002 3 2.70E+002 0.00E+000 9.66E-002 3 3.00E+002 0.00E+000 9.38E-002 3 3.10E+002 4.00E-001 1.26E+000 

Zum Beispiel möchte ich in der obigen Tabelle die folgenden Dinge machen:

  1. Entpacken Sie die letzte Zeile jedes Zyklus oder, weiter fortgeschritten, sortieren Sie den Zyklus nach Zeit und extrahieren Sie die Zeile des Zyklus mit der neuesten Zeit. Wie Sie sehen können, hat die letzte Zeile nicht immer die neueste Zeit wegen unserer Testmaschine Glitch, aber in der Regel tut. Aber je größer die Nummer später die Zeit ist.
  2. Extrahiere alle Zeilen für die letzten fünf Zyklen.
  3. Extrahiere alle Zeilen von Zyklus 4 zu Zyklus 30.

Hier ist mein Code:

 import sys, subprocess, glob mdbfiles = glob.glob('*.res') for DATABASE in mdbfiles: subprocess.call(["mdb-schema", DATABASE, "mysql"]) table_names = subprocess.Popen(["mdb-tables", "-1", DATABASE], stdout=subprocess.PIPE).communicate()[0] tables = table_names.splitlines() sys.stdout.flush() a=str('Channel_Normal_Table') for table in tables: if table != '' and table==a: filename = DATABASE.replace(".res","") + ".csv" file = open(filename, 'w') print("Dumping " + table) contents = subprocess.Popen(["mdb-export", DATABASE, table], stdout=subprocess.PIPE).communicate()[0] # I NEED TO PUT SOMETHING HERE TO SORT AND EXTRACT THE DATA I NEED file.write(contents) file.close() 

One Solution collect form web for “Brauchen Sie Hilfe, um verarbeitete mdb-Datei in Python auf Linux-Maschine zu sortieren”

Es kann einfacher sein, nicht mit einer flachen Liste von Zeilen umzugehen, sondern sie in eine Struktur umzuwandeln, die es erlauben würde, die Daten einfacher zu "abzufragen". Etwas wie eine Liste von Dicts, wo jeder Dict einen Zyklus darstellt:

 cycles = {} rows = contents.splitlines() # split the `contents` text blob into individual lines for row in rows[1:]: # the first line in your question is a header - [1:] skips it row = rows.split() # split each line by whitespace cycle = cycles.setdefault(row[0], {'id': row[0], 'rows': []} cycle['rows'].append({'cycle':row[0], 'test_time': row[1], 'current': row[2], ...}) 

Dann kannst du sie nach test_time sortieren:

 for key, cycle in cycles.items(): cycles['rows'].sort(key=itemgetter('test_time')) 

Dann können Sie Ihre Daten verarbeiten. Die letzte Zeile jedes Zyklus:

  for key, cycle in cycles.items(): output_row(cycles['rows'][-1]) 

Zeilen der letzten fünf Zyklen:

  for key, cycle in sorted(cycles.items())[:-5]: output_rows(cycles['rows']) 

Auszüge aus 4 bis 30:

 for idx in range(4, 31): cycle = cycles[str(idx)] output_rows(cycles['rows']) 
  • Binärer Stringsuche in Python 3.x
  • Sortieren Sie eine Teilmenge einer Python-Liste, um die gleiche relative Reihenfolge wie in einer anderen Liste zu haben
  • Heapq.merge () -Funktion zur Liste der sortierten Dateien
  • Wie kann man ein Array von Ganzzahlen schneller als Quicksort sortieren?
  • Sortierte Wortfrequenz zählen mit Python
  • Python, der während der Sortierung auf die Liste zugreift
  • Sortieren eines Wörterbuches hierarchisch und alphabetisch (Python)
  • Sortierung der Liste mit utf-8 charachters
  • Wie man die schnelle Sortierung nach Index in einer Liste einer Liste sortiert
  • Sortierung einer Liste von Tupeln mit 3 Elementen in Python
  • Python-Gruppe nach Array a, und fassen Array b - Performance zusammen
  • Python ist die beste Programmiersprache der Welt.