2017-11-20 1 views
0

Ich versuche einen Python Split zu machen, aber es scheint ein Problem mit meiner Logik zu geben.Python Split wenn es nur ein Element gibt

Ich habe einige Daten, getrennt durch ein Semikolon. Einige Beispiele meiner Daten wäre wie:

  • 89; 50; 20

ich nur aus jeder Zeile einen Wert abrufen möchten. Wie zum Beispiel in Zeile 1 möchte ich nur den letzten Wert, der 20 ist, und ich möchte 40 aus der zweiten Zeile.

Ich habe versucht, mit dem folgenden Code:

fields = fields.split(";")[-1] 

Es ist für die erste Reihe arbeitet, bekam ich 20, aber ich bin nicht in der Lage, die Daten aus der zweiten Reihe zu bekommen, da es nur ein Element in der Spaltung hat.

Dann habe ich versucht, eine if-else-Bedingung wie unten zu verwenden, aber der Code kann nicht ausgeführt werden.

if (len(fields.split(";")) > 0): 

    fields = fields.split(";")[-1] 
else: 
    pass 

Weiß jemand, wie man mit diesem Problem umgeht? Was ich erreiche ist, dass wenn ich nur einen Wert in dieser Zeile habe, werde ich es lesen. Wenn es mehr als einen Wert gibt, teile ich ihn und nehme den letzten Wert.

Antwort

2

Verwenden Sie strip zur Normalisierung der Eingabe, das Problem ist, gibt es eine zusätzliche ; für eine Nummer Situation, so sollten wir es zuerst entfernen.

In [1]: def lnum(s): 
    ...:  return s.strip(';').split(';')[-1] 
    ...: 

In [2]: lnum('89;50;20') 
Out[2]: '20' 

In [3]: lnum('89;') 
Out[3]: '89' 

In [5]: lnum('10;') 
Out[5]: '10' 
+0

besser 'zu verwenden rstrip' –

2

Also, wenn Sie sehen, wenn Sie die Zeichenfolge aufgeteilt - '40;' Semikolon (;), erhalten Sie eine Liste von zwei Strings - ['40', '']. So gibt fields.split(";")[-1] eine leere Zeichenfolge für die Eingabe '40;' zurück.

Also, entweder Sie strippen Sie das letzte Semikolon ; vor dem Splitten wie folgt.

print('40;'.rstrip(';').split(';')[-1]) 

OR, können Sie tun:

fields = '40;'.split(';') 
if fields[-1]: 
    print(fields[-1]) 
else: 
    print(fields[-2]) 

Ich ziehe den ersten Ansatz als der if/else Ansatz. Schauen Sie sich auch die .strip(), .lstrip(), .rstrip() Funktionen an.

+0

Hallo Es tut mir leid, ich das Semikolon in meiner zweiten Reihe von Daten entfernt, realisiert nur, wenn es nur ein Element ist, wird es am Ende kein Semikolon sein. – decemberrobot

+0

@decentrobotot dann sollten Sie keinen Fehler haben !! –

0

Eine andere Möglichkeit ist, Re-Modul zu verwenden.

from re import findall 

s1 = '80;778;20' 
s2 = '40' 

res1 = findall('\d+', s1) 
res2 = findall('\d+', s2) 

print res1[-1] 
print res2[-1] 
Verwandte Themen