标签:readlines style line 错误 打开 while print 错误代码 attribute
知识点:文件对象提供了三个“读”方法: .read()、.readline() 和 .readlines()。每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量。
问题描述:
我们的设想是想是:当文件读取第一行的时候,读取文件二的所有行数进行打印;读取第二行的时候,读取文件二的所有行数进行打印,以此类推,得到的结果应该是文件一有X行,文件二有Y行,打印总行数为X+(X*Y)
文件1 文件2
a x
b y
错误代码: file1=open(‘1‘,‘r‘) line1=file1.readline() line2=file2.readline() while line1: print line2 line1=file1.readline() file2.close file1.close |
代码解释:
同时读取两个文件并且读取文件的首行分别赋给line1和line2;line1=a;line2=x 当进入第一个while循环的时候,读取第一个文件的第一行line1,此时line1的值是a并进行打印a; 进而执行第二个while循环,读取line2的值,此时line2的值是x并进行打印出x,继续执行下一条,循环读取文件的第二行,赋给line2=y; 并继续执行第二个while循环,继续进行打印line2的值,打印出y,然后继续读取下一行,发现为空的时候,跳出第二个循环; 执行第一个while循环,继续读取文件1的下一行内容,赋值给line1=b,继续执行第一个while循环,打印line1的值, 执行到第二个while的时候,发现里面的值为空了,不会在进入第二个while循环,继续循环下面的指令。 关闭两个文件 执行的结果: a x y b |
正确代码: file1=open(‘1‘,‘r‘) file2.close |
代码解释: 读取第一个文件,并且读取文件的首行,赋给line1,line1=a 执行第一个while循环,读取line1,并打印line1的值a,然后打开文件2,并读取文件2的首行赋给line2; 进而执行第二个while循环,读取line2,并打印line2的值x,然后继续读取文件2的下一行,赋给line2,继续执行第二个while循环,打印出line2的值:y, 继续读取文件2的下一行内容,发现为空,跳出第二个while循环; 继续执行下一跳语句,读取文件1的下一行内容赋给line1,line1=b,继续执行第一个while循环,打印line1的值,b, 然后打开第二个文件,继续第二个个循环的操作,此时文件重新被打开,从头开始读取, 继续执行“打开文件2,并读取文件2的首行赋给line2;进而执行第二个while循环,读取line2,并打印line2的值x,然后继续读取文件2的下一行, 赋给line2,继续执行第二个while循环,打印出line2的值:y,继续读取文件2的下一行内容,发现为空,跳出第二个while循环” 当发现第一个文件读取的行数为空时,跳出第一个while循环,并且关闭两个文件。 执行结果 a ---| x | 第一次循环 y ---| b ---| y ---|
|
从上面的对比可以看出,第一次代码,把第二个while循环后,没有及时的让文件回到首行,才造成了,第二个循环的时候没有办法进入到第二个while循环里面
网上说也可以用seek进行回到首行,但是我执行的时候会提示“AttributeError: ‘str‘ object has no attribute ‘seek‘” 类型错误
不知道重复读取文件会不会造成什么后果,我把file2.close提前到,当执行完第二个while的时候,就把文件2关闭
希望大虾不吝赐教,其中有问题麻烦指出,谢谢
标签:readlines style line 错误 打开 while print 错误代码 attribute
原文地址:http://www.cnblogs.com/monsteryang/p/6442094.html