如何在python中同时读取和处理多个文件

2024-02-15

我有多个文件,我想同时读取它们,从每一行中提取一个数字并计算平均值。对于少量文件,我使用 itertools 模块中的 izip 来完成此操作。这是我的代码。

from itertools import izip
import math

g=open("MSDpara_ave_nvt.dat",'w')

with open("sample1/err_msdCECfortran_nvt.dat",'r') as f1, \
     open("sample2/err_msdCECfortran_nvt.dat",'r') as f2, \
     open("sample3/err_msdCECfortran_nvt.dat",'r') as f3, \
     open("err_msdCECfortran_nvt.dat",'r') as f4:

     for x,y,z,bg in izip(f1,f2,f3,f4):
         args1=x.split()
         i1 = float(args1[0])
         msd1 = float(args1[1])


         args2=y.split()
         i2 = float(args2[0])
         msd2 = float(args2[1])


         args3=z.split()
         i3 = float(args3[0])
         msd3 = float(args3[1])

         args4=bg.split()
         i4 = float(args4[0])
         msd4 = float(args4[1])


         msdave = (msd1 + msd2 + msd3 + msd4)/4.0

         print>>g, "%e  %e" %(i1, msdave)

 f1.close()
 f2.close()
 f3.close()
 f4.close()
 g.close()

这段代码工作正常。但是如果我想同时处理100个文件,那么代码就会变得非常冗长。还有其他更简单的方法吗?似乎 fileinput 模块也可以处理多个文件,但我不知道它是否可以同时处理。

Thanks.


The with open模式很好,但在这种情况下它会妨碍你。您可以打开文件列表,然后在其中使用该列表izip:

filenames = ["sample1/err_msdCECfortran_nvt.dat",...]
files = [open(i, "r") for i in filenames]
for rows in izip(*files):
    # rows is now a tuple containing one row from each file

在 Python 3.3+ 中你还可以使用ExitStack https://docs.python.org/3.4/library/contextlib.html#contextlib.ExitStack in a with block:

filenames = ["sample1/err_msdCECfortran_nvt.dat",...]
with ExitStack() as stack:
    files = [stack.enter_context(open(i, "r")) for i in filenames]
    for rows in zip(*files):
        # rows is now a tuple containing one row from each file

在 Python with凭借其所有优点(例如,无论您如何退出块都会及时关闭),您需要创建自己的上下文管理器:

class FileListReader(object):

    def init(self, filenames):
        self.files = [open(i, "r") for i in filenames]

    def __enter__(self):
        for i in files:
            i.__enter__()
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        for i in files:
            i.__exit__(exc_type, exc_value, traceback)

然后你可以这样做:

filenames = ["sample1/err_msdCECfortran_nvt.dat",...]
with FileListReader(filenames) as f:
    for rows in izip(*f.files):
        #...

不过,在这种情况下,最后一个可能被认为是过度设计。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在python中同时读取和处理多个文件 的相关文章

  • 尽管极其懒惰,但如何在 Python 中模拟 IMAP 服务器?

    我很好奇是否有一种简单的方法来模拟 IMAP 服务器 例如imaplib模块 在Python中 without做很多工作 是否有预先存在的解决方案 理想情况下 我可以连接到现有的 IMAP 服务器 进行转储 并让模拟服务器在真实的邮箱 电子
  • 使用Python开发Web应用程序

    我一直在用 python 做一些工作 但这都是针对独立应用程序的 我很想知道 python 的任何分支是否支持 Web 开发 有人还会建议一个好的教程或网站吗 我可以从中学习一些使用 python 进行 Web 开发的基础知识 既然大家都说
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • Flask 和 uWSGI - 无法加载应用程序 0 (mountpoint='')(找不到可调用或导入错误)

    当我尝试使用 uWSGI 启动 Flask 时 出现以下错误 我是这样开始的 gt cd gt root localhost uwsgi socket 127 0 0 1 6000 file path to folder run py ca
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例

随机推荐

  • 凯尔·辛普森 (Kyle Simpson) 的 OLOO 模式与原型设计模式

    Kyle Simpson 的 OLOO 对象链接到其他对象 模式 与原型设计模式有什么不同吗 除了用专门表示 链接 原型的行为 的东西来创造它并澄清这里没有发生 复制 类的行为 之外 他的模式到底引入了什么 Here s 凯尔模式的示例 h
  • 为什么更改我的框的innerHTML 会使我的按钮在Greasemonkey 中停止工作?

    因此 我编写了一个脚本 在新选项卡中一次加载一个图像 感谢 Brock 让停止按钮可以工作HERE https stackoverflow com a 26418958 996364 然后我打破了它 添加了我在等待该问题的答案时写入的计数器
  • RESTful 身份验证作为一种状态形式

    Its 不可能的无需状态即可进行身份验证 那么 在设计带有身份验证的 RESTful 软件时 我们是否会为了安全性而牺牲这种架构呢 这能走多远 你可以存储任意数量的状态 只要它是为了构建更安全的系统吗 表示状态转移或 REST http e
  • Select2 - 如何插入粗体标题?

    我查看了 select2 的所有文档 但找不到如何插入这些粗体标题 有人可以提供一个完整的代码示例 需要 CSS 吗 来说明如何实现这一点 您可以通过使用来实现这一点optgroup tag
  • 仅在页面加载时处理 f:viewParam

    我正在使用一个
  • Mongoose / MongoDB - 使用预定义的模式附加到文档对象数组的简单示例

    为了简单起见 假设这些是我的集合模式 var MessageDeliverySchema new Schema from type String to type String status type String var Messages
  • 为什么 chrome 不运行这个 javascript

    当我在 Chrome 版本 2 中运行它时 它不会返回字符串 但它可以在 Firefox 版本 3 中运行 为什么是这样
  • Android - 集成 ffmpeg 和 android-ndk-r9c

    我看过很多关于 FFmpeg 以及在 Android 中使用 FFmpeg 的帖子 但我发现这些帖子大多数都是针对旧版本的 FFmpeg 或 Android NDK 我能够得到结果https github com mconf android
  • 使用 jquery 将内容包装在 div 中

    我试图将内容包装在 div 中 但问题是 html 页面不可编辑 所以我尝试其他方法 使用 jQuery 将所有内容包装在 adiv以下是html结构 document ready function hr before div class
  • 我可以在 oncreate 方法之外使用 setContentView 吗?

    我看到很多人告诉你可以在 oncreate 方法之外设置 setContentView 但我没有在任何地方找到示例 现在 当我尝试使用 setContentView 时 我的应用程序崩溃了 这是我的源代码 AlarmActivity jav
  • 如何在 Django 中使用带有 https 的登录重定向?

    我正在使用 django braces LoginRequiredMixin对于我的观点之一 基本上 这会添加一个查询字符串 next my desired url to http example com login 问题是 我在我的网站上
  • 将准备好的语句的结果存储为mysql中的表?

    是否可以将准备好的表的结果存储在mysql中 我的用例是 我根据源表的某些条件创建两个变量 然后根据此条件获取随机行 由于我有 10 个这样的表 我是否应该第一个加入它们 然后根据 总体 传递 过滤标准进行随机化 另请参阅下面的 total
  • 使用 Python 进行迭代时出现 StaleElementException

    我正在尝试为亚马逊结果创建一个基本的网络抓取工具 当我迭代结果时 有时会到达结果的第 5 页 有时仅第 2 页 然后是StaleElementException被抛出 当我在抛出异常后查看浏览器时 我可以看到驱动程序 页面没有向下滚动到页码
  • Xcode 4 中没有外部库的符号/源

    我的应用程序没有看到库的源代码 如果我在库方法上 跳转到定义 XCode 会将我带到 h 文件 但说没有 cpp 对应项 When debugging I see no source code and most of the call st
  • 在 NetLogo 中控制海龟的生命

    在一个项目中 我正在 NetLogo 中开发一个模拟来处理狗和人类的狂犬病 我有一些乌龟 人类和狗 可以接种疫苗 也可以不接种 一开始我创造了一只患有狂犬病的狗 根据疾病的阶段 1或2 它有一定的概率将疾病传播给其他狗 最后 狗可能会因瘫痪
  • 如何在android中使用可见和不可见的按钮

    我想让一个按钮不可见 当我单击另一个按钮时 不可见的按钮将变得可见 然后执行onClick 对可见按钮执行的操作 What onClick 我可以在可见按钮上使用的操作 我使用了如下所示的方法 donebutton Button findV
  • Javascript sort() 不能正确按字母顺序排列

    var ccArray ccArray input checkbox name multiselect ddlCC sort 我可以说我得到了数组中所需的值 但是在 sort 运行之后 数组顺序发生了变化 但不是按字母顺序排列 我得到诸如
  • .NET 多线程:锁定时间过长时用日志锁定对象

    在系统中 我们有通过特定参数锁定对象的方法 作为实现 我们有带有 Enter 方法的 LockManager 该方法接收锁的密钥 检查内部字典中是否存在锁对象 如果不存在 则创建它然后锁定 我想要做的是为特定锁定设置 X 预期时间 如果一个
  • 将 SVN 存储库的一部分复制到新存储库?

    目前 我有一个大型 SVN 存储库 其中包含许多不同的项目 如下所示 Project1 trunk tags branches Project2 trunk tags branches Project3 etc 但是 我现在尝试将其分解为单
  • 如何在python中同时读取和处理多个文件

    我有多个文件 我想同时读取它们 从每一行中提取一个数字并计算平均值 对于少量文件 我使用 itertools 模块中的 izip 来完成此操作 这是我的代码 from itertools import izip import math g