Чтение определенных столбцов из текстового файла в Python

У меня есть текстовый файл, который содержит таблицу, состоящую из чисел е.г:

5 10 6

6 20 1

7 30 4

8 40 3

9 23 1

4 13 6

Если, например, я хочу, чтобы числа содержались только во втором столбце, как извлечь этот столбец в список?

4 ответов


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

вы можете сделать то же самое через осознание списка

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

Docs on split()

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

верните список слов строки s. Если необязательный второй аргумент sep отсутствует или отсутствует, слова разделяются произвольными строками пробелов (пробел, вкладка, новая строка, возврат, formfeed). Если второй аргумент sep присутствует, а не None, он указывает строку, которая будет использоваться в качестве разделителя слов. Этот возвращаемый список будет содержать на один элемент больше, чем число неперекрывающихся вхождений разделителя в строке.

Итак, вы можете опустить пространство, которое я использовал, и сделать просто x.split() но это также удалит вкладки и новые строки, имейте это в виду.


у вас есть файл с разделителями пространства, поэтому используйте модуль, предназначенный для чтения файлов с разделителями,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

на zip(*iterable) шаблон полезен для преобразования строк в столбцы и наоборот. Если Вы читаете файл по строкам...

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

...но нужны столбцы, вы можете передать каждую строку в zip функции

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

можно использовать zip функция с пониманием списка :

with open('ex.txt') as f:
    print zip(*[line.split() for line in f])[1]

результат :

('10', '20', '30', '40', '23', '13')

прежде всего мы открываем файл и как datafile затем мы применяем .read() метод считывает содержимое файла, а затем мы разделяем данные, которые возвращают что-то вроде: ['5', '10', '6', '6', '20', '1', '7', '30', '4', '8', '40', '3', '9', '23', '1', '4', '13', '6'] и мы применили нарезку списка в этом списке, чтобы начать с элемента в позиции индекса 1 и пропустить следующие 3 элемента, пока он не достигнет конца цикла.

with open("sample.txt", "r") as datafile:
    print datafile.read().split()[1::3]

выход:

['10', '20', '30', '40', '23', '13']