2017-08-23 1 views
0

Ich versuche, alle Daten getrennt durch einen neuen Zeilenumbruch zu indizieren.Abrufen von Werten aus einer TXT-Datei eines neuen Zeilentrennzeichens

import cvs 
with open('some_file.txt') as f: 
    data = f.read() 
data = data.splitlines() 

Und ich kann es als

print data[0] 
>>> 0.00000e+00  1.39984e+23  8.08209e+22  1.34691e+23  7.94736e+07  3.54090e+21  1.61507e+04  0.00000e+00  4.36307e-01  2.53048e-02  1.17516e-03  5.58890e+03  5.06638e+00  0.00000e+00  4.53490e-02  5.94527e-01  4.49423e-01  5.40076e-02  8.84406e-01  1.44792e-05  2.13497e+04  3.38802e+06  3.38397e-04  3.66874e-01  2.09206e-01  3.59185e-01  45536941 
print data[1] 
>>> 1.00000e+00  1.46478e+23  8.85202e+22  1.07364e+23  5.65863e+07  3.16193e+21  3.11939e+03  0.00000e+00  9.08775e-01  2.01753e-02  9.82056e-04  7.68423e+03  8.29516e+00  0.00000e+00  1.26423e-01  1.68922e-02  9.82179e-01  4.30002e-02  1.21514e+00  2.93802e-06  2.44811e+06  4.00670e+06  2.71861e-05  3.79373e-01  2.31627e-01  2.82576e-01  48923553 
print data[:2] 
>>> ['  0.00000e+00  1.39984e+23  8.08209e+22  1.34691e+23  7.94736e+07  3.54090e+21  1.61507e+04  0.00000e+00  4.36307e-01  2.53048e-02  1.17516e-03  5.58890e+03  5.06638e+00  0.00000e+00  4.53490e-02  5.94527e-01  4.49423e-01  5.40076e-02  8.84406e-01  1.44792e-05  2.13497e+04  3.38802e+06  3.38397e-04  3.66874e-01  2.09206e-01  3.59185e-01  45536941', '  1.00000e+00  1.46478e+23  8.85202e+22  1.07364e+23  5.65863e+07  3.16193e+21  3.11939e+03  0.00000e+00  9.08775e-01  2.01753e-02  9.82056e-04  7.68423e+03  8.29516e+00  0.00000e+00  1.26423e-01  1.68922e-02  9.82179e-01  4.30002e-02  1.21514e+00  2.93802e-06  2.44811e+06  4.00670e+06  2.71861e-05  3.79373e-01  2.31627e-01  2.82576e-01  48923553'] 

Jede indizierte Wert eine bestimmte Menge gelesen hat ich Index aus bin zu wollen. Zum Beispiel ist data[0] das erste Teilchen zusammen mit seinen Werten und seine Indexnummer wird durch data[0][0] angezeigt, die Positionen x, y, z sind mit data[0][1], bzw. data[0][4] für seine Masse usw. angegeben.

In ähnlicher Weise erhalten Sie die gleichen Mengen aus dem 2. Partikel , dem 3. data[2], und so weiter durch die gesamte Liste data[:].

Mein Problem ist, dass ich als

nicht so schön Index in jedem der Partikelwerte können
posx = data[:][1] 
posy = data[:][2] 
posz = data[:][3] 
... 

oder in jeder Spalte teilen.

posx = [float(row.split()[1]) for row in data] 
posy = [float(row.split()[1]) for row in data] 
posz = [float(row.split()[1]) for row in data] 

im Format gegeben, dass es in ist

Wenn Sie es reproduzieren mögen, habe ich einen Dropbox-Link zur Verfügung gestellt. https://www.dropbox.com/sh/6f0cy4gk8x1k0rm/AADser16cMI9Xhhw3lyP7vWaa?dl=0

+1

Sobald Sie eine Antwort gefunden haben, die für Sie funktioniert, klicken Sie bitte auf das Häkchen neben dieser Antwort, um es zu akzeptieren. Dadurch können andere Personen mit Ihrem Problem wissen, welche Lösung für Sie funktioniert hat. – Adi219

+0

Mögliche Duplikate von [wie CSV in Datensatzarray in numpy lesen?] (Https://stackoverflow.com/questions/3518778/how-to-read-csv-into-record-array-in-numpy) –

Antwort

2

diese in Ihrem vorhandenen Code:

NiceArr = [] 
for item in data: 
    NiceArr.append(item.split()) 

NiceArr wird zu einem Array mit Arrays und jedes innere Array enthält die Partikelwerte.

Sie können alle Partikelwerte auf die gleiche Weise abrufen, wie Sie in Ihrem Beitrag verwenden möchten.

Verwandte Themen