2012-03-25 9 views
6

Ho un file nel formato di seguito:Python leggere stringhe da file e dividerlo in valori

995957,16833579 
995959,16777241 
995960,16829368 
995961,50431654 

Voglio leggere in ogni riga, ma dividere i valori nei valori appropriati. Per esempio la prima linea sarebbe stata suddivisa in:

x = 995957 
y = 16833579 

Fin dalla sua una stringa quando si legge in e voglio convertirli in un int e dividerli, esattamente come dovrei andare a fare questo? Qualsiasi aiuto sarebbe apprezzato.

Grazie!

+0

Quale codice hai provato finora? –

risposta

14

Qualcosa di simile - per ogni linea di leggere nella variabile stringa a:

>>> a = "123,456" 
>>> b = a.split(",") 
>>> b 
['123', '456'] 
>>> c = [int(e) for e in b] 
>>> c 
[123, 456] 
>>> x, y = c 
>>> x 
123 
>>> y 
456 

ora si può fare ciò che è necessario con x e y come assegnati, che sono numeri interi.

+0

'map (int, a.split (", "))' è bello –

1
>>> [[int(i) for i in line.strip().split(',')] for line in open('input.txt').readlines()] 
[[995957, 16833579], [995959, 16777241], [995960, 16829368], [995961, 50431654]] 
10

Utilizzare open(file, mode) per i file. La modalità è una variante di 'r' per la lettura, 'w' per la scrittura e possibilmente 'b' aggiunta (ad es. 'Rb') per aprire i file binari. Vedi il link qui sotto.

Utilizzare open con readline() o readlines(). Il primo restituirà una riga alla volta, mentre il secondo restituirà una lista delle linee.

Utilizzare split(delimiter) da dividere sulla virgola.

Infine, è necessario trasmettere ogni elemento a un numero intero: int(foo). Probabilmente vorrai circondare il tuo cast con un blocco try seguito da except ValueError come nel link sottostante.

È inoltre possibile utilizzare 'assegnazione multipla' per assegnare a e b in una volta:

>>>a, b = map(int, "2342342,2234234".split(",")) 
>>>print a 
2342342 
>>>type(a) 
<type 'int'> 

python io docs

python casting

+0

Ottima risposta ... –

14

vorrei fare qualcosa di simile:

filename = "mynumbers.txt" 
mynumbers = [] 
with open(filename) as f: 
    for line in f: 
     mynumbers.append([int(n) for n in line.strip().split(',')]) 
for pair in mynumbers: 
    try: 
     x,y = pair[0],pair[1] 
     # Do Something with x and y 
    except IndexError: 
     print "A line in the file doesn't have enough entries." 

L'open with è raccomandato in http://docs.python.org/tutorial/inputoutput.html s Ince assicura che i file siano chiusi correttamente anche se durante l'elaborazione viene sollevata un'eccezione.

Problemi correlati