Python 读取txt文件并将各个列保存为列表

Python 读取txt文件并将各个列保存为列表,python,python-3.x,list,Python,Python 3.x,List,我试图读取一个.txt文件,并将每列中的数据保存为列表。文件中的每一列都包含一个变量,稍后我将使用该变量绘制图形。我已经尝试过寻找最好的方法来实现这一点,大多数答案都建议打开文件,阅读它,然后拆分列或将列保存为列表。txt中的数据如下所示- 0 1.644231726 0.00025 1.651333945 0.0005 1.669593478 0.00075 1.695214575 0.001 1.725409504 分隔符是空格'或制表符'\t'。我使用以下代码尝试将这些列附加到

我试图读取一个.txt文件,并将每列中的数据保存为列表。文件中的每一列都包含一个变量,稍后我将使用该变量绘制图形。我已经尝试过寻找最好的方法来实现这一点,大多数答案都建议打开文件,阅读它,然后拆分列或将列保存为列表。txt中的数据如下所示-

0   1.644231726
0.00025 1.651333945
0.0005  1.669593478
0.00075 1.695214575
0.001   1.725409504
分隔符是空格
'
或制表符
'\t'
。我使用以下代码尝试将这些列附加到我的变量中-

import csv

with open('./rvt.txt') as file:
    readfile = csv.reader(file, delimiter='\t')
    time = []
    rim = []
    for line in readfile:
        t = line[0]
        r = line[1]
        time.append(t)
        rim.append(r)

print(time, rim)
但是,当我尝试使用
print(time,rim)
打印列表、time和rim时,我收到以下错误消息-

r = line[1]
IndexError: list index out of range

但是,如果我注释掉
r=line[1]
rim.append(r)
部分,我只能打印“时间”。我如何处理这个问题?提前谢谢你

我建议如下:

import pandas as pd

df=pd.read_csv('./rvt.txt', sep='\t'), header=[a list with your column names])

然后,您可以使用列表(您的列)将列作为列表使用。

问题在于分隔符。数据集包含多个空格“”

当您使用
'\t'
和 打印
您可以看到它没有用分隔符分隔行

例如:

要获得所需的结果,您可以使用
(空格)作为分隔符,并
筛选空值:

readfile = csv.reader(file, delimiter=" ")
time, rim = [], []
for line in readfile:
    line = list(filter(lambda x: len(x), line))
    t = line[0]
    r = line[1]

以下是执行此操作的代码:

import csv

with open('./rvt.txt') as file:
    readfile = csv.reader(file, delimiter=” ”)
    time = []
    rim = []
    for line in readfile:
        t = line[0]
        r = line[1]
        time.append(t)
        rim.append(r)
print(time, rim)

也许您应该使用pandas?很可能文本文件中的一行不包含
时间
rim
的两个值,因此
行[1]
不存在,并弹出此错误。您还可以打印行号,找出产生此错误的行,并检查其中的文件。无论如何,
pandas
似乎是一个更好的选择,因为它将更具容错性。这将在r中给出不正确的值。正如我在回答中所解释的,行之间的空间不一致,值
r=line[1]#将得到“”而不是实际值
这很有效,非常感谢!太好了,请接受(或者向上投票)答案,这样问题将从“未回答”队列中消失。干杯
import csv

with open('./rvt.txt') as file:
    readfile = csv.reader(file, delimiter=” ”)
    time = []
    rim = []
    for line in readfile:
        t = line[0]
        r = line[1]
        time.append(t)
        rim.append(r)
print(time, rim)