2016-05-02 4 views
0

Organisation Ich habe eine txt-Datei, die wie folgt aussieht:eine schmutzige txt-Datei

0.000E+00 0.000E+00 0.000E+00 0.000E+00 
0.000E+00 0.000E+00 0.000E+00 0.000E+00 
0.000E+00 0.000E+00 0.000E+00 0.000E+00 
0.147E-01-0.158E-01-0.707E-02 0.173E-01 
-0.593E-01 0.111E+00 0.153E+00 0.155E+00 
0.859E-01-0.664E-01-0.281E+00-0.497E+00 
-0.626E+00-0.587E+00-0.347E+00 0.560E-01 

Dies ist eine sehr lange Datei, so kann ich es manuell nicht tun. Wie Sie sehen können, haben einige der Zahlen Leerzeichen zwischen ihnen und andere (negative Werte) nicht. Wenn ich versuche, es zu lesen, kann ich keinen geeigneten Weg finden, die Werte zu trennen. Wenn ich delimiter = '-' wähle, liest mein Skript die Werte, die Leerzeichen enthalten, als einen Wert. Wenn ich delimiter = '' wähle, macht mein Skript das Gleiche mit den Werten, die mit minos gespart wurden. Ist es gut, den Text zu lesen und die Werte gut trennen zu können?

mein Skript:

inf=open("data","r") 
for columns in (raw.strip().split() for raw in inf): 
    print (columns[0]) 

Antwort

7

Es ist nicht die optimale Lösung, sondern versucht, diese:

normalized_file_content = file_content.replace('-', ' -').replace('E -', 'E-') 

Dies wird ein Leerzeichen vor den negativen Zahlen addiert, aber nicht zwischen den E und - Zeichen.

+0

, das gut aussieht, aber wo muss ich es in meinem Skript hinzufügen? – GuyB

+0

In etwa so: 'für Spalten in (raw.strip(). Split() für rohe in inf.replace ('-', '-'). Replace ('E -', 'E-')):' – sc3w

0

Ich schlage vor, mit regex

for row in data: 
    print map(float, re.findall('-?\d\.\d{3}E[+-]\d{2}', row) 
Verwandte Themen