2016-05-31 6 views
0

Ich habe vor kurzem eine Simulation ausgeführt, die temporäre Daten in den Verzeichnissen 0, 0.1, 0.2, ..., 10 ausgeben.(Python) Programm zum Lesen spezifischer Daten aus vielen Ausgabedateien

In jedem dieser Verzeichnisse befindet sich eine Textdatei mit dem Namen rigidMotion, die eine Zeile enthält, die ich lesen möchte.

Die Linie wie folgt aussieht:

centreOfRotation (0.000 0.000 0.000) // 

, wo die Zahlen natürlich variieren.

Ich möchte dann nur die Zahlen an eine Textdatei oder eine CSV-Datei gesendet werden, damit ich sie plotten kann.

Angesichts der gleichen Zeile in jeder Datei habe ich versucht, LineCache zu verwenden, aber ich bin mir nicht sicher, wie Sie die for-Schleife einrichten, um jedes Verzeichnis zu lesen.

+0

Lesen der Dateien in einer Schleife, dann gelten möglicherweise etwas regex über den Inhalt, das heißt '^ centreOfRotation (. +)' in mehrzeiligen Modus und die erste Gruppe greifen. Oder lesen Sie den Text zeilenweise und verwenden Sie 'startswith()'. – Jan

+0

Great Regex würde gut funktionieren. Aber wie richte ich eine Schleife ein, um diese Dateien zu durchlaufen? Es wäre großartig, wenn ich einfach gehen könnte: für (int i = 0; i <= 10; i + 0,1) benutze dann open für Dateiname/i, aber das würde natürlich nicht funktionieren. – Bruce

+0

@Bruce siehe meine Antwort unter – Jieter

Antwort

1

Für das Verzeichnis Lesen dieses in mehreren Verzeichnissen für mich die beste gearbeitet:

import os 

for subdir, dirs, files in os.walk("your root directory"): 
    for file in files: 
     print os.path.join(subdir, file) 
     #processing the files 

Für die Inline-Verarbeitung i String Trimmen, wenn nur die Zahlen darin ändern verwenden würde.

trimmedString = originalString[a:-b] 

wobei ‚a‘ den letzten Index ist, was Sie von Anfang an schneiden will, und ‚b‘ ist für das Ende, in Ihrem Fall:

a = der Index der öffnende Klammer

b = Index der Schließbügel

+0

Das ist super danke! – Bruce

2

Sie können glob verwenden, um Dateien nach einem Muster zu suchen, das in Ihrem Fall etwa */rigidMotion ist, dann über diese Dateien iterieren und die Werte sammeln und sie in einer neuen Datei ausgeben.

Verwandte Themen