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

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)

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

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

但可使用强大的zip操作:

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

这样层层的嵌套未免啰嗦,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)

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

from contextlib improt ExitStack
with 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. PHP+MySQL中实现分页
  2. 【kettle】window安装与配置
  3. 【转】【UML】使用Visual Studio 2010 Team System中的架构师工具(设计与建模)
  4. Seajs demo
  5. 创建文档和自定义的qt assistant
  6. Oracle select into from 和 insert into select
  7. 基于CORS的geoserver同源访问策略
  8. linux虚拟文件系统2
  9. SG函数学(hua)习(shui)记录
  10. Spring学习(12)--- @Autowired与@Resource 对比
  11. 201521123071《Java程序设计》第1周学习总结
  12. BZOJ:1443: [JSOI2009]游戏Game
  13. python_自定日历
  14. 字符串转json以及获取域名的参数
  15. DirectX11 With Windows SDK--25 法线贴图
  16. JavaScript实现预览本地上传图片
  17. iOS原生实现二维码拉近放大
  18. python数学第三天【方向导数】
  19. 这可能由 CredSSP 加密 oracle 修正引起的。
  20. wchar_t和char转化

热门文章

  1. c# 给文件/文件夹 管理用户权限
  2. Git连接远程服务器
  3. [JZOJ3692] 【SRM 611】ElephantDrinking
  4. day30 python类的继承,抽象类等
  5. csp-s模拟100,101T1,T2题解
  6. LUOGU P2290 [HNOI2004]树的计数(组合数,prufer序)
  7. day 82 Vue学习三之vue组件
  8. node-webkit笔记
  9. 王者归来,Java 程序设计葵花宝典!
  10. 运行 composer update,提示 Allowed memory size of bytes exhausted