2012-06-20 3 views
7

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

+2

Potrebbe mostrare del codice? – jsalonen

+4

Dovresti mostrare il codice che "_is not working_" e spiegare cosa significa "_is not working_" in più dettagli. – Tadeck

+2

Inoltre, potresti spiegare come sono separate le colonne in inputdata1.txt – dckrooney

risposta

7

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] 
11
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.

+0

' line.strip() 'è ridondante se è seguito da' line.split() ' –

5

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 commento pass
0
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.