需要从文件(Python3.4)读取坐标(不同行上的x,y)的帮助吗
我现在有一个作业要做。我有点卡住了 如何读取文件(coordinates.txt),例如,其中包含以下内容:需要从文件(Python3.4)读取坐标(不同行上的x,y)的帮助吗,python,file,Python,File,我现在有一个作业要做。我有点卡住了 如何读取文件(coordinates.txt),例如,其中包含以下内容: 500 500 100 100 然后从这两个坐标(500500)和(100100)中走出来 如果每个坐标都在一条线上,我知道怎么做,但遗憾的是,这违反了规范 我还知道如何打开和读取文件,只是不知道如何将“x”分配给第1行,“y”分配给第2行,“x”分配给第3行,等等 这样做的原因是能够使用turtle模块绘制点。您应该使用with安全地打开和关闭正在读取的文件 import itert
500
500
100
100
然后从这两个坐标(500500)和(100100)中走出来
如果每个坐标都在一条线上,我知道怎么做,但遗憾的是,这违反了规范
我还知道如何打开和读取文件,只是不知道如何将“x”分配给第1行,“y”分配给第2行,“x”分配给第3行,等等
这样做的原因是能够使用turtle模块绘制点。您应该使用
with
安全地打开和关闭正在读取的文件
import itertools
with open(infilepath) as infile: # open the file
# use itertools.repeat to duplicate the file handle
# use zip to get the pairs of consecutive lines from the file
# use enumerate to get the index of each pair
# offset the indexing of enumerate by 1 (as python starts indexing at 0)
for i, (x,y) in enumerate(zip(*itertools.repeat(infile, 2)), 1):
print("The {}th point is at x={}, y={}".format(i, x, y))
下面是一些代码:
coords = list()
coord = (None, None)
with open('file.txt', 'r') as f:
for indx, line in enumerate(f):
if indx % 2 == 0:
coord[0] = int(line.strip())
else:
coord[1] = int(line.strip())
coords.append(coord)
打开文件并读取每一行。在每一个偶数行(如果索引可被2整除),将数字存储为元组的第一个元素。每隔一行,将数字存储为同一元组的第二个元素,然后将该元组附加到列表中
您可以按如下方式打印列表:
for c in coords:
print(c)
您可以使用iter()
创建两个迭代器,然后将它们压缩在一起,将两行组合成一个元组:
with open('coordinates.txt') as f:
for x, y in zip(iter(f), iter(f)):
print('({}, {})'.format(int(x), int(y))
t.setpos(int(x), int(y))
t.pendown()
t.dot(10)
# etc....
案例A:
如果您的文件是
test.txt
:500100100
您可以使用以下选项:
with open("test.txt", "r") as f:
for line in f:
x, y, z, w = tuple(map(int,(x for x in line.split(" "))))
t1 = (x, y)
t2 = (z, w)
print t1, t2
它打印出:
(500, 500) (100, 100)
您可以将上述所有内容放入一个函数中,并将t1、t2
作为元组返回
案例B:如果
test.txt
为:
500
500
100
100
使用:
打印相同的结果:
(500, 500) (100, 100)
下面是一个非常简单的实现,您可以将其用作参考。我已将坐标收集为列表中的元组
afile = open('file.txt','r')
count = 0
alist = []
blist = []
for line in afile:
count = count + 1
blist.append(line.rstrip())
if count == 2:
count = 0
alist.append(tuple(blist))
blist = []
print alist
你到底陷得有多深?你已经走了多远?您对哪一部分有问题?你尝试了什么方法但没有成功?这是我的代码,我假设(x,y)坐标在同一条线上。自从发现他们在不同的线路上,我完全被难住了。下面是代码截图:@trev915不要给出截图,请将代码粘贴到这里。顺便说一句,看看。@trev915的“请在这里粘贴代码”,Kevin的意思是你应该在StackOverflow上发布代码。你可以给它一个好看的“代码格式”,每行加上四个空格。你只有在自己做家务的时候才能学会。我认为你应该告诉OP如何使用这些代码,似乎OP不只是想打印出来。我完全同意。我目前正在学习python入门课程的中途。我不知道这些代码在做什么,稍微解释一下会有很大帮助。我也在努力学习,不仅仅是得到一个快速的答案。谢谢你的编辑和评论,这会更有帮助。你能解释一下“as f”的作用吗?谢谢@trev915 Check.@trev915:
as f
将with
语句创建的上下文管理器绑定到一个变量。上下文管理器确保文件在退出上下文管理器时关闭。你可以做一些阅读和实验来找出这个答案和其他答案中的代码是如何工作的。。。。特别是,通过在Python解释器中进行交互式实验,您将了解更多信息。
afile = open('file.txt','r')
count = 0
alist = []
blist = []
for line in afile:
count = count + 1
blist.append(line.rstrip())
if count == 2:
count = 0
alist.append(tuple(blist))
blist = []
print alist