2012-06-20 21 views
7

Mi archivo de entrada tiene dos columnas. Estoy tratando de imprimir la segunda columna de inputdata1.txt dentro de un segundo for-loop. Pero mi código no está funcionando. ¿Puede alguien decirme qué debo hacer?Python - Leer segunda columna del archivo

+2

¿Podría mostrar algún código? – jsalonen

+4

Debería mostrar el código que "_no está funcionando_" y explicar qué significa "no funciona" en más detalles. – Tadeck

+2

Además, es posible que desee explicar cómo se separan las columnas en inputdata1.txt – dckrooney

Respuesta

7

Podría hacer algo como esto. Separator es el caracter que su archivo usa para separar columnas, p. Ej. pestañas o comas

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 

esto asume las columnas están separadas por espacios en blanco.

La función split() puede especificar diferentes separadores. Por ejemplo, si las columnas se separaron con las comas ,, usaría line.split(',') en el código anterior.

NOTA: El uso de with para abrir su archivo cierra automáticamente cuando haya terminado, o si se encuentra con un excepción.

+0

' de la biblioteca 'csv'.strip() 'es redundante si es seguido por' line.split() ' –

5

Quick 'n sucia

Si se instala AWK:

# $2 for the second column 
os.system("awk '{print $2}' inputdata1.txt") 

Utilizar una clase

hacer una clase:

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 

Si inputdata1.txt se vería así:

 
hel lo wor ld 
wor ld hel lo 

Se podría conseguir esto:

print getCol('inputdata1.txt')[1] 
#['lo', 'ld'] 

Notas adicionales

  • Puede utilizar pyawk para más características awk
  • Si se está utilizando el Quick 'n el uso del método sucia subprocess.Popen
  • Puede cambiar el delimitador getCol('inputdata1.txt', delim=", ")
  • Uso filter para eliminar los valores vacíos o descomentar 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 este código, tienes acceso a todas las columnas de cada línea.

Cuestiones relacionadas