将文本文件的特定列读入列表(python 3.6.3)

时间:2018-01-30 16:22:28

标签: python

我知道这里有一百万个问题,但我找不到符合我所寻找的问题。我们假设我有一个这样的文本文件:

1    34
2    65
3    106

我想扫描这个文件,只读第二列data=[34 65 106],我该怎么做呢?此外,如果我想使该程序能够读取用户输入的任何长度数据集和任何特定列。我可以用简单的python做大部分事情,但阅读文件使我无法接受。

5 个答案:

答案 0 :(得分:1)

pandas对于以下任务来说是一个很有用的库:

import pandas as pd

df = pd.read_csv('file.txt', header=None, delimiter=r"\s+")
lst = df.iloc[:, 1].tolist()

答案 1 :(得分:1)

你使用列表理解:

data = [b for a, b in [i.strip('\n').split() for i in open('filename.txt')]]

答案 2 :(得分:1)

首先需要获取所有行的列表     fileobj.readlines() 然后你可以运行一个for循环来逐行遍历这些行,对于你可以用char分割它的每一行("") 然后在同一个for循环中,您可以将拆分结果的第二个索引添加到现有列表中,这将是您的最终结果

a=fil.readlines()
t=[]
for f in a:
    e=f.split(" ")
    t.append(e[1])

答案 3 :(得分:1)

解决方案

听起来像小帮手功能的情况:

def read_col(fname, col=1, convert=int, sep=None):
    """Read text files with columns separated by `sep`.

    fname - file name
    col - index of column to read
    convert - function to convert column entry with
    sep - column separator
    If sep is not specified or is None, any
    whitespace string is a separator and empty strings are
    removed from the result.
    """
    with open(fname) as fobj:
         return [convert(line.split(sep=sep)[col]) for line in fobj]

res = read_col('mydata.txt')
print(res)

输出:

[34, 65, 106]

如果您想要第一列,即索引0

read_col('mydata.txt', col=0)

如果你想要它们是花车:

read_col('mydata.txt', col=0, convert=float)

如果用逗号分隔列:

read_col('mydata.txt', sep=',')

您可以使用这些可选参数的任意组合。

说明

我们使用默认参数定义一个新函数:

def read_col(fname, col=1, convert=int, sep=None):

这意味着您必须提供文件fname。所有其他参数都是可选的,如果在调用函数时未提供,则将使用默认值。

在函数中,我们打开文件:

with open(fname) as fobj:

现在fobj是一个打开的文件对象。当我们解密时,即在我们结束函数时,文件将被关闭。

此:

[convert(line.split(sep=sep)[col]) for line in fobj]

通过遍历文件的所有行来创建列表。每一行都在分隔符sep处拆分。我们只采用索引为col的列的值。我们还将convert数据类型的值转换为每个默认值的整数。

修改

您也可以跳过文件中的第一行:

with open(fname) as fobj:
     next(fobj)
     return [convert(line.split(sep=sep)[col]) for line in fobj]

或者更复杂的可选参数:

def read_col(fname, col=1, convert=int, sep=None, skip_lines=0):
    # skip first `skip_lines` lines
    for _ in range(skip_lines):
        next(fobj)
    with open(fname) as fobj:
         return [convert(line.split(sep=sep)[col]) for line in fobj]

答案 4 :(得分:0)

文件是否分隔?

您需要先打开文件:

with open('file.txt', 'r') as f:
   filedata = f.readlines()

创建一个列表,遍历这些行并根据您的分隔符将每一行拆分成一个列表,然后将列表中的索引项追加到原始列表中。

data = []
for line in filedata:
    columns = line.split('*your delimiter*')
    data.append(columns[1])

然后数据列表应包含您想要的内容。