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

如何使用python读取文本文件中的数字?,python,file-io,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(

我是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()。有人能帮忙吗?

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


split()

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允许我们通过简单地迭代文件句柄来迭代文件的行。因此,f中的行的
将自动迭代所有行。不需要首先调用
readlines()
,当然也不需要执行
行[0:len(行)]
,这实际上只创建列表的副本,您也可以在
行上迭代

现在,在循环内部,我们获取该行,并在不带参数的情况下用空格分割它。
str.split
将始终这样做。返回一个列表,因此我们将其存储在一个额外的变量中。接下来,我们将每个列附加到正确的列表中。当你想让这些值变成数字时,我们把它们转换成整数

您提到的方法基本上去掉了字符串的任何前导或尾随空格。由于我们使用的是不带参数的
str.split
,额外的空格也将被删除,所以我们并不真正需要它

最后,将四个单独的列表存储在单独的变量中有点烦人。您只需创建列表列表即可:

a = [[], [], [], []] # A list with four empty lists
然后,在循环内部,您可以将
数据[i]
附加到
a[i]

for i, value in enumerate(line.split()):
    a[i].append(int(value))

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

的正确子列表中。您的缩进在
for
循环中是错误的。要包含在循环中的所有代码都应该缩进4个空格

a1=line()
不会起任何作用。语法
a=a()
a
设置为等于函数
a()
的结果或类
a
的新实例。如果要将行添加到列表
a1
中,需要使用
a1.append(行)

编辑: 要回答注释,下面的代码将根据所需的数字列表重新排列数据

numbers = zip(*data)

请使用正确的缩进,因为这不会运行。如果你将问题缩小到一件事,这将得到更好的回答。你可以试着运行你的代码,特别询问你收到的任何错误消息,或者为什么输出与你期望的输出不同。我会教他如何使用循环。另外,他想要数字,所以让我们提到
int()
@thg435谢谢你的建议;)这将生成一个行列表,而不是列列表。@poke,任务完成:)
data = [[int(v) for v in line.split()] for line in lines]
numbers = zip(*data)