从python中的文本文件中读取特定列

时间:2015-05-13 13:37:31

标签: python list text-files

我有一个文本文件,其中包含一个由数字组成的表,例如:

  

5 10 6

     

6 20 1

     

7 30 4

     

8 40 3

     

9 23 1

     

4 13 6

如果我想要仅包含在第二列中的数字,我如何将该列提取到列表中?

6 个答案:

答案 0 :(得分:22)

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,则单词由空格字符的任意字符串(空格,制表符,换行符,返回值,换页符)分隔。如果存在第二个参数sep而不是None,则它指定要用作单词分隔符的字符串。返回的列表将比字符串中分隔符的非重叠出现次数多一个项目。

因此,您可以省略我使用的空间并仅执行x.split(),但这也会删除标签和换行符,请注意这一点。

答案 1 :(得分:8)

您有一个以空格分隔的文件,因此请使用专为读取分隔值文件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]

答案 2 :(得分:4)

您可以使用zip函数和列表解析:

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

结果:

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

答案 3 :(得分:2)

首先我们打开文件并作为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']

答案 4 :(得分:2)

我知道这是一个老问题,但是没有人提到,当您的数据看起来像一个数组时,numpy的loadtxt就派上用场了:

StringID

答案 5 :(得分:0)

这可能会有所帮助:

import csv
with open('csv_file','r') as f:
    # Printing Specific Part of CSV_file
    # Printing last line of second column
    lines = list(csv.reader(f, delimiter = ' ', skipinitialspace = True))
    print(lines[-1][1])
    # For printing a range of rows except 10 last rows of second column
    for i in range(len(lines)-10):
        print(lines[i][1])