zoukankan      html  css  js  c++  java
  • 同时读取两个文件进行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关闭

    希望大虾不吝赐教,其中有问题麻烦指出,谢谢

  • 相关阅读:
    WPF,Silverlight与XAML读书笔记第二十四 控件之六 – Items控件之菜单&其它
    WPF,Silverlight与XAML读书笔记第二十八 控件之十 – 媒体控件
    WPF,Silverlight与XAML读书笔记第三十一 可视化效果之布局概览 & 尺寸
    WPF,Silverlight与XAML读书笔记第三十 绘图系统概览
    rabbitmq的发布确认和事务
    Windows Server 2008答疑
    C#获取当前所有进程名
    无法在Web服务器上启动调试。调试失败,因为没有启用集成Windows身份认证
    8088 汇编速查手册
    Access保存图片
  • 原文地址:https://www.cnblogs.com/monsteryang/p/6442094.html
Copyright © 2011-2022 走看看