知識點:文件對象提供了三個“讀”方法: .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關閉
希望大蝦不吝賜教,其中有問題麻煩指出,謝謝