同時讀取兩個文件進行while循環


知識點:文件對象提供了三個“讀”方法: .read()、.readline() 和 .readlines()。每種方法可以接受一個變量以限制每次讀取的數據量,但它們通常不使用變量。

問題描述:

我們的設想是想是:當文件讀取第一行的時候,讀取文件二的所有行數進行打印;讀取第二行的時候,讀取文件二的所有行數進行打印,以此類推,得到的結果應該是文件一有X行,文件二有Y行,打印總行數為X+(X*Y)

文件1            文件2

  a                 x

  b                 y

錯誤代碼:

file1=open('1','r')
file2=open('2','r')

line1=file1.readline() 

line2=file2.readline()

while line1:
  print line1
  while line2: 

    print line2
    line2=file2.readline()

  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')
line1=file1.readline()
while line1:
  print line1
  file2=open('2','r')
  line2=file2.readline()
  while line2: #
    print line2
    line2=file2.readline()

  file2.close
  line1=file1.readline()
file1.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        ---|
x    | 第二次循環循環並讀取文件2內容

y    ---| 

 

 

從上面的對比可以看出,第一次代碼,把第二個while循環后,沒有及時的讓文件回到首行,才造成了,第二個循環的時候沒有辦法進入到第二個while循環里面

網上說也可以用seek進行回到首行,但是我執行的時候會提示“AttributeError: 'str' object has no attribute 'seek'”  類型錯誤

不知道重復讀取文件會不會造成什么后果,我把file2.close提前到,當執行完第二個while的時候,就把文件2關閉

希望大蝦不吝賜教,其中有問題麻煩指出,謝謝

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM