forloop被跳过了,我不明白为什么Python

2024-09-29 17:16:46 发布

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

我很难理解为什么代码第二次通过while循环时会跳过for循环。第一轮一切都很顺利。你知道吗

k = 0
with open("Result.txt", "r") as ParseOutput:
    while k < num_lines:                                # num lines in test file = 12
        print("k: " + str(k))
        for line in islice(ParseOutput, k, k+100000):
            print("k in islice: " + str(k))
            field_list = []
            fields = line.strip("\n")
            fields = fields.split("\t")
            field_list.append(fields)
            query_plasmid = field_list[0][0]
            print("Query Plasmid: " + str(query_plasmid))

        l = k

        for m, line in enumerate(islice(ParseOutput, l, l+100000)):
            if l < 100000:
                print("if l: " + str(m))
                field_list = []
                fields = line.strip("\n")
                fields = fields.split("\t")
                field_list.append(fields)

                next_plasmid = field_list[0][0]
                print("Next Plasmid: " + str(next_plasmid) + "  l: " + str(l))

                if not str(query_plasmid) == str(next_plasmid):
                    query_plasmid_index = UniqueID_List.index(query_plasmid)
                    Start_line_list[query_plasmid_index] = k
                    End_line_list[query_plasmid_index] = m
                    New_start_line = m+1
                    print("Start line: " + str(k))
                    print("End line: " + str(m))
                    print("New_start_line: " + str(New_start_line))

                    l = 999999
                    print("l: " + str(l))

        k = k+1

打印命令只供我控制。以下是脚本的输出:

k: 0
k in islice: 0
Query Plasmid: DA_000001
if l: 0
Next Plasmid: DA_000001 l: 0
if l: 1
Next Plasmid: DA_000001 l: 0
if l: 2
Next Plasmid: DA_000001 l: 0
if l: 3
Next Plasmid: DA_000002 l: 0
Start line: 0
End line: 3
New_start_line: 4
l: 999999
k: 1
k: 2
k: 3
k: 4
k: 5
k: 6
k: 7
k: 8
k: 9
k: 10
k: 11

正如标题所说,我不明白为什么k>;0会跳过for循环。我感谢你的帮助或任何其他想法!你知道吗

最好的, 菲利普

PS:我更希望有一个列表解决方案,但不幸的是,我的文件太大了,我甚至无法枚举行而不会出现内存错误。因此,解决方法是使用硬编码数字。你知道吗


Tags: infieldfieldsforiflinequerylist
1条回答
网友
1楼 · 发布于 2024-09-29 17:16:46

我想你从第一个循环开始就把整个文件都读了。 因为达到了filedescriptor“ParseOutput”的EOF,所以for循环和for循环都没有任何行可读取。你知道吗

在循环的末尾(如果需要,也可以在开头),需要添加以下内容:

ParseOutput.seek(0)

这将使filedescriptor指向文件的开头。你知道吗

相关问题 更多 >

    热门问题