阅读CSV文件每两个字符
问题描述:
我有一个看起来像这样的文件:阅读CSV文件每两个字符
200 310 201 310 202 310 ...
基本上,这些像素坐标分组。例如,像素编号1是(200x310)。 现在,我想循环每个像素。我已经通过加载文件
with open('myfile.csv', 'rt') as csvfile:
spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
#Now I would like to have something like :
for i in ???
x,y = ???
感谢
答
开始也许一个简单的方法会更好:
for i in range(0,len(spamreader),2):
x, y = spamreader[i], spamreader[i + 1]
那是类似的东西,你正在寻找?编辑:这是行不通的。根据文档,你可以做这样的事情:
while(true):
try:
x = spamreader.next() #.next() returns the next element as a string
y = spamreader.next() # same
# do stuff with it...
except StopIteration:
# we have read everything
+0
fwiw,我得到'TypeError:'_csv.reader'类型的对象没有len()'当我尝试 –
+0
我正在查看文档现在,坚持 – Xatyrian
答
你可以做这样的事情:给定输入线在你的问题
def pairwise(iterable):
"s -> (s0,s1), (s2,s3), (s4, s5), ..."
a = iter(iterable)
for pair in zip(a, a):
yield pair
with open('myfile.csv', 'rt') as csvfile:
for line in csvfile:
for pair in pairwise(line.split()):
print(pair)
输出:
('200', '310')
('201', '310')
('202', '310')
在Python 3中,您可以使用一个yield from
并简化pairwise()
一点:
def pairwise(iterable):
"s -> (s0,s1), (s2,s3), (s4, s5), ..."
a = iter(iterable)
yield from zip(a, a)
答
你可以简单地链中的CSV读者返回的行和成对使用的值
with open('myfile.csv', 'rt') as csvfile:
spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
items = itertools.chain.from_iterable((row for row in spamreader))
for i in items:
x, y = i, next(items) # the next consumes a second element
由于next
功能不消耗第二元件,在每次迭代你实际上在未来2个元素
像素是全部在一条线上,还是每对一条线? –