Saltar al contenido

Leer columnas específicas de un archivo de texto en Python

Solución:

f=open(file,"r")
lines=f.readlines()
result=[]
for x in lines:
    result.append(x.split(' ')[1])
f.close()

Puedes hacer lo mismo usando una lista de comprensión

print([x.split(' ')[1] for x in open(file).readlines()])

Documentos en split()

string.split(s[, sep[, maxsplit]])

Devuelve una lista de las palabras de la cadena. s. Si el segundo argumento opcional sep está ausente o Ninguno, las palabras están separadas por cadenas arbitrarias de caracteres de espacio en blanco (espacio, tabulación, nueva línea, retorno, alimentación de formulario). Si el segundo argumento sep está presente y no es Ninguno, especifica una cadena que se utilizará como separador de palabras. La lista devuelta tendrá un elemento más que el número de apariciones no superpuestas del separador en la cadena.

Entonces, puede omitir el espacio que usé y hacer solo x.split() pero esto también eliminará pestañas y nuevas líneas, tenga en cuenta eso.

Tiene un archivo delimitado por espacios, así que use el módulo diseñado para leer archivos de valores delimitados, csv.

import csv

with open('path/to/file.txt') as inf:
    reader = csv.reader(inf, delimiter=" ")
    second_col = list(zip(*reader))[1]
    # In Python2, you can omit the `list(...)` cast

los zip(*iterable) El patrón es útil para convertir filas en columnas o viceversa. Si está leyendo un archivo por filas …

>>> testdata = [[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]]

>>> for line in testdata:
...     print(line)

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]

… pero necesita columnas, puede pasar cada fila al zip función

>>> testdata_columns = zip(*testdata)
# this is equivalent to zip([1,2,3], [4,5,6], [7,8,9])

>>> for line in testdata_columns:
...     print(line)

[1, 4, 7]
[2, 5, 8]
[3, 6, 9]

Sé que esta es una pregunta antigua, pero nadie mencionó que cuando sus datos se ven como una matriz, el loadtxt de numpy es útil:

>>> import numpy as np
>>> np.loadtxt("myfile.txt")[:, 1]
array([10., 20., 30., 40., 23., 13.])
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *