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

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

5 10 6

6 20 1

7 30 4

8 40 3

9 23 1

4 13 6

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

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

Документы по split()

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

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

Таким образом, вы можете опустить пространство, которое я использовал, и сделать только x.split() но это также приведет к удалению вкладок и новых строк, имейте это в 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']