Python基础 使用with结构打开多个文件

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                       

考虑如下的案例:
同时打开三个文件,文件行数一样,要求实现每个文件依次读取一行,然后输出,我们先来看比较容易想到的写法:

with open(filename1, 'rb') as fp1:    with open(filename2, 'rb') as fp2:        with open(filename3, 'rb') as fp3:            for i in fp1:                j = fp2.readline()                k = fp3.readline()                print(i, j, k)
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注意这里只能对单个文件进行for循环读取,不能写成:

for i, j, k in fp1, fp2, fp3:    print(i, j, k)
   
   
  • 1
  • 2

但可使用强大的zip操作:

for i, j, k in zip(fp1, fp2, fp3):    print(i, j, k)
   
   
  • 1
  • 2

这样层层的嵌套未免啰嗦,with结构支持一种更简洁的写法:

with open(filename1, 'rb') as fp1, open(filename2, 'rb') as fp2, open(filename3, 'rb') as fp3:    for i in fp1:        j = fp2.readline()        k = fp3.readline()        print(i, j, k)
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

或者使用更为优雅的写法,此时需要contextlib语法糖:

from contextlib improt ExitStackwith ExitStack() as stack:    files = [stack.enter_context(open(fname)) for fname in [filename1, filename2, filename3]]    for i, j, k in zip(files[0], files[1], files[2]):        print(i, j, k)
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/hftytf/article/details/83821603