如何使用python读取文本文件中的数字?

时间:2014-01-22 14:30:06

标签: python file-io

我是python编程的新手,我正在通过简单的程序学习python。这是我想要做的:如果我有一个包含数字的文本文件: 说这是一个f1.txt

f1.txt:

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 15


fp = open('f1.txt')
a1=[]
a2=[]
a3=[]
a4=[]
lines = fp.readlines()

for ln in lines[0:len(lines)]:
line=ln.strip().split()
a1=line();

fp.close()

我希望在a1中获得第一列,在a2中获得第二列,依此类推。我知道上面的代码可能有误,请告诉我哪里出错了以及如何纠正它。特别是我不理解命令'ln.strip()。split()'。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:17)

你可以这样做:

a1 = []
a2 = []
a3 = []
a4 = []

with open('f1.txt') as f:
    for line in f:
        data = line.split()
        a1.append(int(data[0]))
        a2.append(int(data[1]))
        a3.append(int(data[2]))
        a4.append(int(data[3]))

首先,我们使用with语句打开文件。这可确保即使出现错误,文件也会自动关闭。这样的方式更好。文件打开时f将成为文件句柄。

现在,Python允许我们通过迭代文件句柄来迭代文件的行。因此for line in f将自动迭代所有行。不需要先调用readlines(),当然也不需要执行lines[0:len(lines)],而lines基本上只创建列表的副本 - 您也可以迭代str.split

现在在循环内部,我们取线,并用空格分割 - 没有参数str.split将始终这样做。 str.split返回一个列表,因此我们将其存储在一个额外的变量中。接下来,我们将每列附加到正确的列表。正如您希望将值作为数字,我们将它们转换为整数。

你提到的str.strip基本上取消了字符串的任何前导或尾随空格。由于我们在没有参数的情况下使用a = [[], [], [], []] # A list with four empty lists ,因此也会删除额外的空格,因此我们并不需要这样做。

最后,将四个单独的列表存储在单独的变量中对维护来说有点烦人。您只需创建一个列表列表:

data[i]

然后,在循环内部,您只需将a[i]追加到for i, value in enumerate(line.split()): a[i].append(int(value))

a

当迭代enumerate时,您不仅会获得值(在迭代列表时会得到的值),还会得到索引。因此,使用此方法,我们可以获得分割行中每个元素的索引,并可以自动将其附加到{{1}}的正确子列表中。

答案 1 :(得分:3)

data = []
for line in lines:
    data.append([int(v) for v in line.split()])

data = [[int(v) for v in line.split()] for line in lines]

修改 要回答评论 - 下面的代码会将数据重新排列为必需的数字列表

numbers = zip(*data)

答案 2 :(得分:0)

line[0], line[1]等应该为您提供每行中的第一个,第二个等条目。

split()函数将在空白处拆分给定行,并返回条目列表。

答案 3 :(得分:0)

for循环中的缩进错误。您想要包含在循环中的所有代码都应缩进4个空格。

a1= line()行不会做任何事情。语法a = A()a设置为等于函数A()的结果或等于类A的新实例。如果您想在列表a1中添加行,则需要使用a1.append(line)