我是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()
Run Code Online (Sandbox Code Playgroud)
我想在a1中获得第一列,在a2中获得第二列,依此类推.我知道上面的代码可能有误,请告诉我哪里出错了以及如何纠正它.特别是我不理解命令'ln.strip().split()'.有人可以帮忙吗?
pok*_*oke 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]))
Run Code Online (Sandbox Code Playgroud)
首先,我们使用该with语句打开文件.这可确保即使出现错误,文件也会自动关闭.这样的方式更好.文件打开时f将是文件句柄.
现在,Python允许我们通过迭代文件句柄迭代文件的行.因此for line in f将自动迭代所有行.没有必要先调用readlines(),当然也没有必要这样做lines[0:len(lines)],基本上只创建列表的副本 - 你也可以迭代lines.
现在在循环内部,我们采用行,并用空格分割它 - 没有参数str.split将始终这样做.str.split返回一个列表,所以我们将它存储在一个额外的变量中.接下来,我们将每列附加到正确的列表.正如您希望将值作为数字,我们将它们转换为整数.
在str.strip你提到的基本上起飞字符串的开头或结尾的空白.由于我们使用str.split没有参数,额外的空格也将被删除,所以我们并不真的需要它.
最后,将四个单独的列表存储在单独的变量中对于维护来说有点烦人.您可以简单地创建一个列表列表:
a = [[], [], [], []] # A list with four empty lists
Run Code Online (Sandbox Code Playgroud)
然后,在循环内部,您可以追加data[i]到a[i]:
for i, value in enumerate(line.split()):
a[i].append(int(value))
Run Code Online (Sandbox Code Playgroud)
迭代时enumerate,您不仅会获得值(在迭代列表时会得到的值),还会得到索引.因此,使用它,我们得到分割线内每个元素的索引,并可以自动将其附加到正确的子列表中a.
| 归档时间: |
|
| 查看次数: |
49769 次 |
| 最近记录: |