2010-03-30 13 views
9

Ich habe ein Textdokument, das eine Liste von Zahlen enthält, und ich möchte es in eine Liste konvertieren. Im Moment kann ich nur die gesamte Liste im 0. Eintrag der Liste finden, aber ich möchte, dass jede Nummer ein Element einer Liste ist. Kennt jemand eine einfache Möglichkeit, dies in Python zu tun?Konvertieren einer Zeichenfolge in eine Liste in Python

1000 
2000 
3000 
4000 

zu

['1000','2000','3000','4000'] 
+3

Wollen Sie wirklich 'wollen [ '1000', '2000', '3000', '4000']'? Vielleicht wäre "[1000,2000,3000,4000]" besser? –

+0

Ihre Frage gibt zu viele Möglichkeiten. Enthält die Textdatei nur eine Liste von Zahlen oder ist diese Liste in einem größeren Kontext? Können Sie steuern, wie Sie aus dem Dokument lesen, oder sind Sie dabei, eine Zeichenfolge gelesen zu haben, die eine Reihe von Newline- oder Leerzeichen-getrennten Zahlen enthält? Sind die Zahlen in der Liste immer durch Zeilenumbrüche getrennt oder sind sie manchmal durch andere Leerzeichen getrennt? Wollen Sie wirklich eine Liste von Strings als Ergebnis haben, oder wäre eine Liste von ganzen Zahlen besser? – Omnifarious

Antwort

20

Um ein Python-String in eine Liste verwenden, um die str.split Methode zu konvertieren:

>>> '1000 2000 3000 4000'.split() 
['1000', '2000', '3000', '4000'] 

split hat einige Optionen: schauen sie für fortgeschrittene Anwendungen auf.

Sie können die Datei auch in eine Liste mit der readlines() Methode eines Dateiobjekts lesen - sie gibt eine Liste von Zeilen zurück. Um zum Beispiel eine Liste von ganzen Zahlen aus dieser Datei zu erhalten, können Sie tun:

lst = map(int, open('filename.txt').readlines()) 

P. S: Sehen Sie einige andere Methoden für das gleiche in den Kommentaren tun. Einige dieser Methoden sind netter (mehr Pythonic) als meine

+1

du verwendest 'str.split', nicht' string.split', letzteres ist sowieso veraltet. – SilentGhost

+0

@SilentGhost: Tippfehler behoben, danke für's Bemerken –

+2

Dateiobjekte sind iterierbar, daher gibt es selten einen Grund, die 'readlines' Methode zu verwenden. Zum Beispiel könnten Sie mit 'map (int, open ('filename.txt'))' 'die gleichen Ergebnisse erhalten wie Ihr letztes. –

1
>>> open("myfile.txt").readlines() 
>>> lines = open("myfile.txt").readlines() 
>>> lines 
['1000\n', '2000\n', '3000\n', '4000\n'] 
>>> clean_lines = [x.strip() for x in lines] 
>>> clean_lines 
['1000', '2000', '3000', '4000'] 

Oder, wenn Sie bereits eine Zeichenfolge haben, verwenden Sie str.split:

>>> myfile 
'1000\n2000\n3000\n4000\n' 
>>> myfile.splitlines() 
['1000', '2000', '3000', '4000', ''] 

Sie können das leere Element mit einer Liste Verständnis entfernen (oder nur eine regelmäßige for Schleife)

>>> [x for x in myfile.splitlines() if x != ""] 
['1000', '2000', '3000', '4000'] 
+1

benutze 's.splitlines()', nicht 's.split (" \ n ")' –

0

Sie müssen möglicherweise Zeilenumbrüche entfernen.

# list of strings 
[number for number in open("file.txt")] 

# list of integers 
[int(number) for number in open("file.txt")] 
+0

Und wenn das OP Zeilenumbrüche entfernen müsste, wie würde dieser Code aussehen? – Omnifarious

+0

Sie können auch die eingebaute 'liste' anstelle eines Listenverständnisses verwenden -' list (open ("myfile.txt")) '->' ['1000 \ n', '2000 \ n', '3000 \ n ',' 4000 \ n '] ' – dbr

+0

@ dbr:' .readlines() 'könnte eine bessere Option sein. – SilentGhost

1
$ cat > t.txt 
    1 
    2 
    3 
    4 
    ^D 
    $ python 
    Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51) 
    [GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
    Type "help", "copyright", "credits" or "license" for more information. 
    >>> l = [l.strip() for l in open('t.txt')] 
    >>> l 
    ['1', '2', '3', '4'] 
    >>> 
+1

Sie müssen nicht' .readlines() '! – SilentGhost

+0

wahr. jetzt entfernt, danke, dass du darauf hingewiesen hast! – rytis

1
with open('file.txt', 'rb') as f: 
     data = f.read() 
    lines = [s.strip() for s in data.split('\n') if s] 
Verwandte Themen