2012-02-19 17 views
27

Questo è il mio problema.Python strip con n

Sto provando a leggere un file di testo e quindi convertire le linee in float. Il file di testo ha \n e \t ma non so come liberarmene.

Ho provato a utilizzare line.strip() ma non l'ho rimosso e ho ricevuto un errore quando volevo convertire le cose in float. Ho quindi provato line.strip("\n") ma non ha funzionato. Il mio programma funziona correttamente quando estraggo lo \t e lo \n dal file di testo, ma fa parte del compito per farlo funzionare con loro.

Non so davvero perché questo non funziona. Grazie per qualsiasi aiuto.

+6

Puoi fornire un estratto del tuo file di testo? – Josh

+2

Strip rimuove solo gli spazi bianchi dall'inizio e dalla fine di una riga. Se hai delle schede nel mezzo della linea, non le rimuoverà. – Swiss

+2

Vale la pena notare che "\ n" non è il carattere di ritorno su tutti i sistemi. Potrebbe essere necessario rimuovere "\ n", "\ r" o "\ r \ n". Se mostri del codice completo che hai provato e immetti i dati, questo potrebbe essere più facile da risolvere. –

risposta

1

pythons csv library è buono per questo.

http://docs.python.org/library/csv.html

CSV = virgola valori separati, ma se si imposta il delimitatore = \ t, allora funziona per i valori separati da tabulazione troppo.

62

Dovresti essere in grado di utilizzare line.strip('\n') e line.strip('\t'). Ma questi non modificano la variabile line ... restituiscono semplicemente la stringa con lo \n e lo \t spogliati. Quindi dovrai fare qualcosa come

line = line.strip('\n') 
line = line.strip('\t') 

Che dovrebbe funzionare per la rimozione dall'inizio e fine. Se si dispone di \n e \t nel mezzo della stringa, è necessario fare

line = line.replace('\n','') 
line = line.replace('\t','') 

per sostituire il \n e \t con il nulla.

0

Spesso, a seconda del modo di leggere le linee, al fine di sbarazzarsi di \ n da MyLine, si può prendere MyLine [: - 1] poiché \ n è l'ultimo carattere di MyLine.

Per la '\ t' è possibile utilizzare replace() o striscia()

1

Se stai cercando di convertire le linee di carri separati da caratteri di tabulazione, quindi appena float(line) cercherà di convertire l'intera linea in un float, che fallirà se ce n'è più di uno. Usare strip per sbarazzarsi degli spazi bianchi iniziali e finali non aiuterà questo problema fondamentale.

Forse hai bisogno di split ogni linea in pezzi e fare qualcosa con ogni pezzo?

2

Che ne dici di utilizzare un pattern Python regex?

import re 
f = open('test.txt', 'r') 
strings = re.findall(r"\S+", f.read()) 

E per il vostro caso di line.strip() non funzionerà perché Python rimuove solo le iniziali e finali caratteri

Da Python Docs - restituire una copia della stringa con iniziali e finali caratteri rimossi. Se i caratteri sono omessi o Nessuno, i caratteri spazi vengono rimossi.Se dato e non None, i caratteri devono essere una stringa; i caratteri nella stringa verranno eliminati da entrambe le estremità della stringa su cui viene chiamato questo metodo.

16

Il metodo strip() rimuove gli spazi bianchi per impostazione predefinita, quindi non c'è bisogno di chiamare con parametri come '\ t' o '\ n'. Tuttavia, le stringhe in Python sono immutabili e non possono essere modificate, ovvero la chiamata line.strip() non modificherà l'oggetto line. Il risultato è una nuova stringa che viene restituita dalla chiamata.

Come già accennato, sarebbe utile se hai postato un esempio dal tuo file di input. Se ci sono più numeri su ciascuna riga, strip() non è la funzione da utilizzare. Invece dovresti usare split(), che è anche un metodo stringa.

Per concludere, partendo dal presupposto che ogni riga contiene diversi carri separati da spazi bianchi, e che si vuole costruire un elenco di tutti i numeri, si può provare il seguente:

floats = [] 
with open(filename) as f: 
    for line in f: 
     floats.extend([float(number) for number in line.split()]) 
0

È possibile utilizzare:

mylist = [] 
# Assuming that you have loaded data into a lines variable. 
for line in lines: 
    mylist.append(line.strip().split('\t') 

per ottenere un elenco python con solo i valori di campo per tutte le righe di dati.