2017-10-17 1 views
0

Ich bin ein wenig hier stecken. Ich versuche, eine Datendatei in Python zu lesen 3. ich eine Liste von ListenPython-Liste in Listen aus Datendatei mit verschiedenen Layouts

* Die ersten 36 Zeilen machen will: jede Zeile ist eine Liste, die

f = open("a.data","r") 
h = [] 
a = [] 
for word in range(0,797): 
    g = f.readline()  
    h.append(g.strip()) 
    a.append(h) 
    h = [] 
auf die Hauptliste angehängt ist

Aber von der 37. Zeile und darüber hinaus: ich eine Schleife müssen, wo dies der Fall ist:

die neue Linie eine weiße Linie ist, passieren

die nächsten 4 Zeilen in eine neue Liste ‚h‘ gehen und hängen zu 'h' zu ‚A‘

Die Sache ist die, dass Readline-() verrückt wirkt für alles versucht, ich

Irgendwelche Vorschläge?

Vielen Dank im Voraus.

ps die Strings in den 4 Zeilen werden durch a geteilt;

+1

Es wäre hilfreich, die Datei zu sehen, die Sie lesen möchten. Warum wiederholst du auch zu 797? Sie sollten folgendes verwenden: mit open ('a.data', 'r') als f: g = f.readline(). – mrCarnivore

+1

"handelt verrückt" ...? – BlackBear

+0

https://pastebin.com/gHKBx9AN Dies ist der erste Teil der Datei. Es gibt 767 Datenpunkte (+36 macht 797) – zorange

Antwort

1

Try this:

import re 

with open('a.data', 'r') as f: 
    lst = re.split(';|\n{1,2}', f.read()) 

length = 36 
lstoflst = [lst[i:i+length] for i in range(0, len(lst)-1, length)] 
print(lstoflst) 

ich die ganze Liste lesen, aufgeteilt auf Newline und Semikolon, und eine Liste der Liste mit einer Liste Verständnis machen.

Bitte beachten Sie ein besseres Datenformat für Ihren nächsten Bericht, wenn möglich, wie CSV.

+0

Das funktioniert super! Lassen Sie mich herausfinden, wie. Also kann ich es selbst machen. Vielen Dank – zorange

+0

Ich lese die ganze Datei mit f.read() Danach haben Sie eine große Zeichenfolge. Die Elemente sind durch Semikolons und Zeilenumbrüche getrennt. re.split kann eine Liste von Elementen generieren, die durch das erste Argument begrenzt sind. '; oder \ n {1,2} '. Der {1,2} ist ein Regex-Quantifizierer für 1 oder 2 Zeilenumbrüche. Danach teile ich die Liste in Slices mit einer Länge von 36. Also mache ich eine for-Schleife, zähle von 0 bis len (lst) in Längenschritten. Also erzeugt die for-Schleife i: 0,36,72 ... Danach setze ich die n Elemente in eine Liste, das äußere [] erzeugt die Liste der Listen –

+0

Das ist mir klar. Ich verstehe nur die 1 oder 2 Zeilen nicht. – zorange

Verwandte Themen