我想一次更改几个文件, 前提是我可以写入所有文件。 我想知道我是否可以将多个打开调用与with语句结合with

try:with open('a', 'w') as a and open('b', 'w') as b:do_something()
except IOError as e:print 'Operation failed: %s' % e.strerror

如果不可能,那么解决该问题的优雅解决方案会是什么样?


#1楼

对于一次打开多个文件或较长的文件路径,将内容分解成多行可能很有用。 @Sven Marnach在《 Python样式指南》中对另一个答案的评论中建议:

with open('/path/to/InFile.ext', 'r') as file_1, \open('/path/to/OutFile.ext', 'w') as file_2:file_2.write(file_1.read())

#2楼

从Python 2.7(或分别为3.1)开始,您可以编写

with open('a', 'w') as a, open('b', 'w') as b:do_something()

在早期版本的Python中,有时可以使用contextlib.nested()嵌套上下文管理器。 但是,这对于打开多个文件无法正常工作-有关详细信息,请参见链接的文档。


在极少数情况下,您想同时打开全部数量可变的文件,可以使用contextlib.ExitStack ,从Python 3.3版本开始:

with ExitStack() as stack:files = [stack.enter_context(open(fname)) for fname in filenames]# Do something with "files"

大多数情况下,您拥有一组可变的文件,但是您可能想要一个接一个地打开它们。


#3楼

只需将and替换为,就可以完成:

try:with open('a', 'w') as a, open('b', 'w') as b:do_something()
except IOError as e:print 'Operation failed: %s' % e.strerror

#4楼

嵌套语句可以完成相同的工作,我认为处理起来更简单。

假设您有inFile.txt,并想同时将其写入两个outFile。

with open("inFile.txt", 'r') as fr:with open("outFile1.txt", 'w') as fw1:with open("outFile2.txt", 'w') as fw2:for line in fr.readlines():fw1.writelines(line)fw2.writelines(line)

编辑:

我不了解拒绝投票的原因。 我在发布答案之前测试了我的代码,它可以按预期工作:就像问题所要求的那样,它写入所有outFile。 无重复写入或写入失败。 因此,我真的很想知道为什么我的答案被认为是错误的,次优的或类似的东西。


#5楼

使用python 2.6它将无法正常工作,我们必须使用以下方式打开多个文件:

with open('a', 'w') as a:with open('b', 'w') as b:

#6楼

因为Python 3.3,你可以使用类ExitStackcontextlib模块安全
打开任意数量的文件

它可以管理动态数量的上下文感知对象,这意味着如果您不知道要处理多少个文件 ,它将证明特别有用。

实际上,文档中提到的规范用例正在管理动态数量的文件。

with ExitStack() as stack:files = [stack.enter_context(open(fname)) for fname in filenames]# All opened files will automatically be closed at the end of# the with statement, even if attempts to open files later# in the list raise an exception

如果您对这些细节感兴趣,下面是一个通用示例,以说明ExitStack工作方式:

from contextlib import ExitStackclass X:num = 1def __init__(self):self.num = X.numX.num += 1def __repr__(self):cls = type(self)return '{cls.__name__}{self.num}'.format(cls=cls, self=self)def __enter__(self):print('enter {!r}'.format(self))return self.numdef __exit__(self, exc_type, exc_value, traceback):print('exit {!r}'.format(self))return Truexs = [X() for _ in range(3)]with ExitStack() as stack:print(len(stack._exit_callbacks)) # number of callbacks called on exitnums = [stack.enter_context(x) for x in xs]print(len(stack._exit_callbacks))print(len(stack._exit_callbacks))
print(nums)

输出:

0
enter X1
enter X2
enter X3
3
exit X3
exit X2
exit X1
0
[1, 2, 3]

#7楼

回答较晚(8年),但对于希望将多个文件合并为一个文件的人 ,以下功能可能会有所帮助:

def multi_open(_list):out=""for x in _list:try:with open(x) as f:out+=f.read()except:pass# print(f"Cannot open file {x}")return(out)fl = ["C:/bdlog.txt", "C:/Jts/tws.vmoptions", "C:/not.exist"]
print(multi_open(fl))

2018-10-23 19:18:11.361 PROFILE  [Stop Drivers] [1ms]
2018-10-23 19:18:11.361 PROFILE  [Parental uninit] [0ms]
...
# This file contains VM parameters for Trader Workstation.
# Each parameter should be defined in a separate line and the
...

如何在Python中使用“ with open”打开多个文件?相关推荐

  1. python中glob模块怎么下_如何在Python中使用glob.glob模块搜索子文件夹?

    如何在Python中使用glob.glob模块搜索子文件夹? 我想在文件夹中打开一系列子文件夹,找到一些文本文件并打印一些文本文件行. 我用这个: configfiles = glob.glob('C ...

  2. python读取ansi编码文件,如何在Python中同时读取ANSI和Unicode txt文件?

    我是python新手,遇到了一个奇怪的问题: 当一个目录中有50个txt文件时,我希望读取每个.txt文件并将其内容保存在一个唯一的变量中,例如:**file = open(fcf[i], 'r') ...

  3. python变量存为matlab,详解如何在python中读写和存储matlab的数据文件(*.mat)

    背景 在做deeplearning过程中,使用caffe的框架,一般使用matlab来处理图片(matlab处理图片相对简单,高效),用python来生成需要的lmdb文件以及做test产生结果.所以 ...

  4. matlab 如何读数据文件,详解如何在python中读写和存储matlab的数据文件(*.mat)

    背景 在做deeplearning过程中,使用caffe的框架,一般使用matlab来处理图片(matlab处理图片相对简单,高效),用python来生成需要的lmdb文件以及做test产生结果.所以 ...

  5. python读取matlab数据_详解如何在python中读写和存储matlab的数据文件(*.mat)

    背景 在做deeplearning过程中,使用caffe的框架,一般使用matlab来处理图片(matlab处理图片相对简单,高效),用python来生成需要的lmdb文件以及做test产生结果.所以 ...

  6. python访问服务器注册表,如何在Python中使用写入权限打开Windows注册表

    我运行蟒蛇过程管理员,并且可以创建新的键和值是这样的: import _winreg as wreg key = wreg.CreateKey(wreg.HKEY_LOCAL_MACHINE, &qu ...

  7. 【机器学习基础】如何在Python中处理不平衡数据

    特征锦囊:如何在Python中处理不平衡数据 ???? Index 1.到底什么是不平衡数据 2.处理不平衡数据的理论方法 3.Python里有什么包可以处理不平衡样本 4.Python中具体如何处理 ...

  8. 如何在Python中建立和训练K最近邻和K-Means集群ML模型

    One of machine learning's most popular applications is in solving classification problems. 机器学习最流行的应 ...

  9. 中boxplot函数的参数设置_如何在Python中生成图形和图表

    在本章中,我们将学习如何在Python中生成图形和图表,同时将使用函数和面向对象的方法来可视化数据. Python中常用的一些可视化数据包括以下几种. Matplotlib. Seaborn. ggp ...

最新文章

  1. C++ Primer 5th笔记(chap 13 拷贝控制)=default
  2. 于计算机交朋友教案,三年级上册信息技术教案-2与计算机交朋友|人教版 (2)
  3. CRMEB v4目录结构说明
  4. alter system switch logfile和alter system archive log current的区别
  5. python的网页解析器_python 之网页解析器
  6. C# 中 for和foreach 性能比较,提高编程性能
  7. sys.dm_exec_query_stats的total_worker_time的单位是微秒还是毫秒
  8. 苹果手机免密支付怎么取消_超市“扫码枪”有啥神奇功能?直接扫走你的资金,不用输入密码|移动支付|手机|免密...
  9. linux内核--设备驱动程序(学习笔记)
  10. linux指令list by time,tar - Linux 常用命令
  11. 机器学习基础(二十七)—— 数据集的使用
  12. Flutter高级第2篇:JSON的序列化和反序列化、创建模型类转换Json数据
  13. attachEvent和addEventListener详解
  14. Windows下Nginx的启动、停止、重启等命令
  15. opencv四点投影变换
  16. access select max_从峰米4k激光家庭影院Max开始,爱上看电影
  17. MOOS-ivp 实验一 在linux系统中安装moos-ivp遇到的各种问题汇总
  18. 核心函数--少儿编程
  19. 企业现金流和资金链区别
  20. 苹果刷机有好处和坏处_苹果更新要通电源吗

热门文章

  1. Android Dialog 全屏、Dialog 底部显示
  2. Android draw bitmap 图片不显示的问题
  3. Android No static field XXX of type I in class Lcom/XXX/R$id错
  4. Jquery入门详解
  5. Swift 懒性属性
  6. Mac-远程连接Mac
  7. webpage not available是什么意思_MySQL很想啊,为什么还要有noSQL?
  8. vue中获取url参数
  9. 阿里面试题,为什么wait()方法要放在同步块中?
  10. 【Teradata】grouping和rollup窗口函数