非常简单的嵌套文件迭代的行为不符合预期

2024-09-28 05:23:18 发布

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

我正在编写一个python脚本来解析2个文本文件,查找某行中第二个文本的内容是否与第一个相同,如果是这样,请使用另一个变量替换它

尝试对文件执行for循环时会出现问题,例如以下代码:

ase = open('text1.txt','r')
endurance = open('text2.txt','r')

for x in ase:
 print('sheet')
 for y in endurance:
    print('yayyeeeeet')

举个例子,text1有100行,text2也有, 输出应为:

sheet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet x100

然后再次以sheet和100xyayyeeeet开始100个循环, 但输出不同,如下所示:

sheet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
yayyeeeeet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet
sheet

我就是不明白为什么会这样 使用Python2.7和Python3.8进行测试


Tags: in文本txt脚本内容foropensheet
3条回答

正如保罗·汉金所说:耐力是一个迭代器。你只能用一次。 请尝试以下方法:

with open('text2.txt','r') as f:
    endurance = f.readlines()

您可以在打开的文件上迭代一次。。。因此,我建议使用readlines()来代替:

ase = open('test.txt','r').readlines()    #< - add .readlines() here
endurance = open('text2.txt','r').readlines()  #< - add .readlines()

for x in ase:
    print('sheet')
    for y in endurance:
        print('yayyeeeeet')

此外,关闭任何打开的文件也是一种很好的做法。所以,我真的建议使用with语句

迭代器在使用完之后不会自动重置。最简单的解决方案是每次重新打开“内部”文件

with open('text1.txt','r') as ase:
    for x in ase:
        print('sheet')
        with open('text2.txt','r') as endurance:
            for y in endurance:
                print('yayyeeeeet')

这避免了将整个文件读入内存的需要


如果希望两个文件都保持打开状态,可以使用seek方法将第二个文件放在开头,但我认为这不能保证与迭代器结合使用。不过,您可以使用对readline的显式调用

with open('text1.txt') as ase, open('text2.txt') as endurance:
    for x in ase:
        print('sheet')
        endurance.seek(0)
        for y in iter(endurance.readline, ''):
            print('yayyeeeeet')           

相关问题 更多 >

    热门问题