2010-03-30 10 views
9

Tengo un documento de texto que contiene una lista de números y quiero convertirlo a una lista. Ahora mismo solo puedo obtener la lista completa en la entrada 0 de la lista, pero quiero que cada número sea un elemento de una lista. ¿Alguien sabe de una manera fácil de hacer esto en Python?Convertir una cadena en una lista en Python

1000 
2000 
3000 
4000 

a

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

Está seguro de querer '[ '1000', '2000', '3000', '4000']'? Tal vez '[1000,2000,3000,4000]' sería mejor? –

+0

Su pregunta admite demasiadas posibilidades. ¿El archivo de texto solo contiene una lista de números, o es esa lista en un contexto más amplio? ¿Puede controlar cómo lee el documento o está atrapado con la lectura de una cadena que contiene un montón de números separados de nueva línea o espacio en blanco? ¿Los números en la lista están siempre separados por líneas nuevas, o están a veces separados por otros espacios en blanco? ¿Realmente quieres una lista de cadenas como resultado, o una lista de enteros sería mejor? – Omnifarious

Respuesta

20

Para convertir una cadena de Python en una lista, utilice el método str.split:

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

split tiene algunas opciones: mirar hacia arriba para usos avanzados.

También puede leer el archivo en una lista con el método readlines() de un objeto de archivo; devuelve una lista de líneas. Por ejemplo, para obtener una lista de números enteros de ese archivo, que puede hacer:

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

P.S: Ver otros métodos para hacer lo mismo en los comentarios. Algunos de esos métodos son más agradables (más Pythonic) que los míos

+1

está usando 'str.split', no' string.split', este último está obsoleto de todos modos. – SilentGhost

+0

@SilentGhost: error de escritura, gracias por notar –

+2

Los objetos de archivo son iterables, por lo que rara vez hay una razón para usar el método 'readlines'. Por ejemplo, podría obtener los mismos resultados que su último fragmento con 'map (int, open ('filename.txt'))'. –

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'] 

O, si usted tiene una cadena ya, utilizar str.split:

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

Se puede quitar el elemento vacío con una lista por comprensión (o simplemente un bucle regular for)

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

use 's.splitlines()', not 's.split (" \ n ")' –

0

Es posible que necesite quitar las nuevas líneas.

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

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

Y, si el OP tuviera que quitar las nuevas líneas, ¿cómo se vería ese código? – Omnifarious

+0

También puedes usar el compilador 'list' en lugar de una lista de comprensión -' list (open ("myfile.txt")) '->' ['1000 \ n', '2000 \ n', '3000 \ n ',' 4000 \ n '] ' – dbr

+0

@dbr:' .readlines() 'podría ser una mejor opción. – 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

no necesita hacer' .readlines() '! – SilentGhost

+0

cierto. eliminado ahora, ¡gracias por señalar eso! – rytis

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