Python在退出简单scrip的while循环时遇到问题

2024-10-02 10:27:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个脚本,将制表符分隔的矩阵(带有标题)重新格式化为“长格式”。参见下面的示例。它正确地执行任务,但似乎陷入了一个无休止的循环。。。你知道吗

输入示例:

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...

Tags: youfalse示例etcmatrixreaderfileme
2条回答

正如senderle的回答所说,j+=1在while循环之外。你知道吗

其他改进可以是:

  1. int(len(i)),只需使用len(i),因为len()总是返回一个int,所以不需要int()左右 它
  2. 使用for rownum,i in enumerate(matrix_reader):,所以现在没有 需要处理一个额外的变量rownum,它将递增 它自己。你知道吗

编辑:作为代码的工作版本,我认为不需要while这里,for循环就足够了。你知道吗

import csv
matrix_file = open('data1.csv')
matrix_reader = csv.reader(matrix_file, delimiter="\t")
header=matrix_reader.next()[0].split() #now header is ['WHO', 'THING1', 'THING2']

for i in matrix_reader:
        line=i[0].split()
        print line[0], "\t",header[1], "\t",line[1]
        print line[0], "\t",header[2], "\t",line[2]

你的j += 1while循环之外,所以j永远不会增加。如果len(i)永远不小于2,那么就有一个无限循环。你知道吗

但正如我们所观察到的,这个代码还有其他问题。这是一个基于你的习惯用法的工作版本。我会做很多不同的事情,但也许你会发现看看你的代码是如何工作的非常有用:

j = 1
while j:
    matrix_file.seek(0)
    rownum = 0
    for i in matrix_reader:
        rownum += 1
        if j == len(i) or j == -1:
            j = -1
        elif rownum == 1:
            header = i[j]
        else:
           print i[0], "\t", header, "\t", i[j]
    j += 1

它不会按您想要的顺序打印行,但它能正确地处理基本信息。你知道吗

我会这样做。我看到这与Ashwini Chaudhary发布的内容类似,但有点笼统:

import csv
matrix_file = open('path')
matrix_reader = csv.reader(matrix_file, delimiter="\t")

headers = next(matrix_reader, '')
for row in matrix_reader:
    for header, value in zip(headers[1:], row[1:]):
        print row[0], header, value

相关问题 更多 >

    热门问题