我编写了一个脚本,将制表符分隔的矩阵(带有标题)重新格式化为“长格式”。参见下面的示例。它正确地执行任务,但似乎陷入了一个无休止的循环。。。你知道吗
输入示例:
WHO THING1 THING2
me me1 me2
you you1 you2
期望输出:
me THING1 me1
me THING2 me2
you THING1 you1
you THING2 you2
代码如下:
import csv
matrix_file = open('path')
matrix_reader = csv.reader(matrix_file, delimiter="\t")
j = 1
while j:
matrix_file.seek(0)
rownum = 0
for i in matrix_reader:
rownum+=1
if j == int(len(i)):
j = False
elif rownum ==1:
header = i[j]
else:
print i[0], "\t",header, "\t",i[j]
j +=1
我想这和我的退出命令有关(j=False)。有什么想法吗?你知道吗
编辑:谢谢你的建议。我认为我最初发布的帖子中的一个拼写错误导致了一些混乱,对此我深表歉意目前我采用了一个简单的解决方案:
valid = True
while valid:
matrix_file.seek(0)
rownum = 0
for i in matrix_reader:
rownum+=1
if j == int(len(i)):
valid = False
etc, etc, etc...
正如senderle的回答所说,
j+=1
在while循环之外。你知道吗其他改进可以是:
int(len(i))
,只需使用len(i)
,因为len()
总是返回一个int,所以不需要int()
左右 它for rownum,i in enumerate(matrix_reader):
,所以现在没有 需要处理一个额外的变量rownum
,它将递增 它自己。你知道吗编辑:作为代码的工作版本,我认为不需要
while
这里,for
循环就足够了。你知道吗你的
j += 1
在while
循环之外,所以j
永远不会增加。如果len(i)
永远不小于2,那么就有一个无限循环。你知道吗但正如我们所观察到的,这个代码还有其他问题。这是一个基于你的习惯用法的工作版本。我会做很多不同的事情,但也许你会发现看看你的代码是如何工作的非常有用:
它不会按您想要的顺序打印行,但它能正确地处理基本信息。你知道吗
我会这样做。我看到这与Ashwini Chaudhary发布的内容类似,但有点笼统:
相关问题 更多 >
编程相关推荐