2016-06-09 2 views
4

Problem: Ich kann nicht scheinen, die Informationen in einer Textdatei analysieren, weil Python liest es als eine vollständige Zeichenfolge nicht einzelne separate Zeichenfolgen. Die Leerzeichen zwischen den einzelnen Variablen sind nicht identisch, weshalb sie nicht getrennt werden. Gibt es eine Möglichkeit für Python, die Leerzeichen flexibel zu entfernen und stattdessen ein Komma oder \ t einzufügen?So entfernen Sie mehr als ein Leerzeichen beim Lesen von Textdatei

Beispiel DATA:

MOR125-1 MOR129-1 0.587 
MOR125-1 MOR129-3 0.598 
MOR129-1 MOR129-3 0.115 

Der Code ich verwende:

with open("Distance_Data_No_Bootstrap_RAW.txt","rb") as f: 
reader = csv.reader(f,delimiter="\t") 
d=list(reader) 
for i in range(3): 
    print d[i] 

Ausgang: ['MOR125-1 MOR129-1 0.587'] ['MOR125-1 MOR129-3 0.598'] ['MOR129-1 MOR129-3 0.115']

gewünschte Ausgabe:

['MOR125-1', 'MOR129-1', '0.587'] 
['MOR125-1', 'MOR129-3', '0.598'] 
['MOR129-1', 'MOR129-3', '0.115'] 
+2

ändern Begrenzer zu Raum und keine loszuwerden zusätzlichen Leerzeichen durch Verwendung .strip() String-Methode –

+0

Wenn ich den Begrenzer zu Raum ändern, werden alle einzelnen Räume, die in der Zeichenfolge vorhanden sind, in Komma drehen. An diesem Punkt ist es eine Liste mit Strings und Leerzeichen, die durch Kommata getrennt sind. Ich bin mir nicht sicher, wie ich ein .strip() ausführen würde, um die Leerzeichen zu entfernen, wenn es keine vollständige Liste ist – UberKoolMan

Antwort

7

Sie können das Trennzeichen einfach als Leerzeichen deklarieren und csv anweisen, nach einem Trennzeichen anfängliche Leerzeichen zu überspringen. Auf diese Weise ist Ihr Trennzeichen tatsächlich der reguläre Ausdruck ' +', dh ein oder mehrere Leerzeichen.

rd = csv.reader(fd, delimiter=' ', skipinitialspace=True) 
for row in rd: 
    print row 
['MOR125-1', 'MOR129-1', '0.587'] 
['MOR125-1', 'MOR129-3', '0.598'] 
['MOR129-1', 'MOR129-3', '0.115'] 
2

Sie können csv.reader anweisen Raum als Trennzeichen verwendet werden und alle zusätzlichen Raum überspringen:

reader = csv.reader(f, delimiter=" ", skipinitialspace=True) 

Ausführliche Informationen zu den verfügbaren Parametern Python docs überprüfen:

Dialect.delimiter A one-Zeichenfolge verwendet getrennte Felder. Es ist standardmäßig ','. Dialect.skipinitialspace Wenn True, wird Leerzeichen unmittelbar nach dem Trennzeichen ignoriert. Der Standardwert ist Falsch.

Verwandte Themen