Il mio file di input ha due colonne. Sto cercando di stampare la seconda colonna di inputdata1.txt
all'interno di un secondo ciclo. Ma il mio codice non funziona. Qualcuno può dirmi cosa dovrei fare?Python - Leggi la seconda colonna dal file
risposta
Si potrebbe fare qualcosa di simile. Separator
è il carattere che il file utilizza per separare le colonne, ad es. schede o virgole.
for line in open("inputfile.txt"):
columns = line.split(separator)
if len(columns) >= 2:
print columns[1]
with open('inputdata1.txt') as inf:
for line in inf:
parts = line.split() # split line into parts
if len(parts) > 1: # if at least 2 parts/columns
print parts[1] # print column 2
Questa assume le colonne sono separate da spazi bianchi.
La funzione split() può specificare separatori diversi. Ad esempio, se le colonne sono state separate con virgole ,
, devi utilizzare line.split(',')
nel codice sopra.
NOTA: L'uso with
per aprire il file si chiude automaticamente quando si è fatto, o se si verifica un un'eccezione.
' line.strip() 'è ridondante se è seguito da' line.split() ' –
rapida 'n sporco
Se AWK è installato:
# $2 for the second column
os.system("awk '{print $2}' inputdata1.txt")
Utilizzando una classe
fare una classe:
class getCol:
matrix = []
def __init__(self, file, delim=" "):
with open(file, 'rU') as f:
getCol.matrix = [filter(None, l.split(delim)) for l in f]
def __getitem__ (self, key):
column = []
for row in getCol.matrix:
try:
column.append(row[key])
except IndexError:
# pass
column.append("")
return column
Se inputdata1.txt
sarà simile:
hel lo wor ld wor ld hel lo
Si potrebbe ottenere questo:
print getCol('inputdata1.txt')[1]
#['lo', 'ld']
Note aggiuntive
- È possibile utilizzare
pyawk
per più funzioni awk - se si sta utilizzando la rapida 'n utilizzare il metodo sporco
subprocess.Popen
- È possibile modificare il delimitatore
getCol('inputdata1.txt', delim=", ")
- Usa
filter
per rimuovere i valori vuoti o rimuovere il commentopass
f = open("file_to_read.txt") # open your file
line = f.readline().strip() # get the first line in line
while line: # while a line exists in the file f
columns = line.split('separator') # get all the columns
while columns: # while a column exists in the line
print columns # print the column
line = f.readline().strip() # get the next line if it exists
Con questo codice, hai accesso a tutte le colonne di ogni riga.
Potrebbe mostrare del codice? – jsalonen
Dovresti mostrare il codice che "_is not working_" e spiegare cosa significa "_is not working_" in più dettagli. – Tadeck
Inoltre, potresti spiegare come sono separate le colonne in inputdata1.txt – dckrooney