如何在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中同时读取和处理多个文件 的相关文章

  • Spark 请求最大计数

    我是 Spark 的初学者 我尝试请求允许我检索最常访问的网页 我的要求如下 mostPopularWebPageDF logDF groupBy webPage agg functions count webPage alias cntW
  • 如何在序列化器创建方法中获取 URL Id?

    我有以下网址 url r member P
  • python 中的代表

    我实现了这个简短的示例来尝试演示一个简单的委托模式 我的问题是 这看起来我已经理解了委托吗 class Handler def init self parent None self parent parent def Handle self
  • 如何正确地将 MIDI 刻度转换为毫秒?

    我正在尝试将 MIDI 刻度 增量时间转换为毫秒 并且已经找到了一些有用的资源 MIDI Delta 时间刻度到秒 http www lastrayofhope co uk 2009 12 23 midi delta time ticks
  • 如何迭代按值排序的 Python 字典?

    我有一本字典 比如 a 6 b 1 c 2 我想迭代一下by value 不是通过键 换句话说 b 1 c 2 a 6 最直接的方法是什么 sorted dictionary items key lambda x x 1 对于那些讨厌 la
  • python 模拟第三方模块

    我正在尝试测试一些处理推文的类 我使用 Sixohsix twitter 来处理 Twitter API 我有一个类充当 Twitter 类的外观 我的想法是模拟实际的 Sixohsix 类 通过随机生成新推文或从数据库检索它们来模拟推文的
  • 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

    我已经查看了很多问题 但仍然无法完全弄清楚 我正在使用 PyQt 并且希望能够运行ffmpeg i file mp4 file avi并获取流式输出 以便我可以创建进度条 我看过这些问题 ffmpeg可以显示进度条吗 https stack
  • 将数据帧行转换为字典

    我有像下面的示例数据这样的数据帧 我正在尝试将数据帧中的一行转换为类似于下面所需输出的字典 但是当我使用 to dict 时 我得到了索引和列值 有谁知道如何将行转换为像所需输出那样的字典 任何提示都非常感激 Sample data pri
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • 在Python中调整图像大小

    我有一张尺寸为 288 352 的图像 我想将其大小调整为 160 240 我尝试了以下代码 im imread abc png img im resize 160 240 Image ANTIALIAS 但它给出了一个错误TypeErro
  • 更改 `base_compiledir` 以将编译后的文件保存在另一个目录中

    theano base compiledir指编译后的文件存放的目录 有没有办法可以永久设置theano base compiledir到不同的位置 也许通过修改一些内部 Theano 文件的内容 http deeplearning net
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • 将 matplotlib 颜色图集中在特定值上

    我正在使用 matplotlib 颜色图 seismic 绘制绘图 并且希望白色以 0 为中心 当我在不进行任何更改的情况下运行脚本时 白色从 0 下降到 10 我尝试设置 vmin 50 vmax 50 但在这种情况下我完全失去了白色 关
  • 在 pytube3 中获取 youtube 视频的标题?

    我正在尝试构建一个应用程序来使用 python 下载 YouTube 视频pytube3 但我无法检索视频的标题 这是我的代码 from pytube import YouTube yt YouTube link print yt titl
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 使用 PyTorch 分布式 NCCL 连接失败

    我正在尝试使用 torch distributed 将 PyTorch 张量从一台机器发送到另一台机器 dist init process group 函数正常工作 但是 dist broadcast 函数中出现连接失败 这是我在节点 0
  • 如何为每个屏幕添加自己的 .py 和 .kv 文件?

    我想为每个屏幕都有一个单独的 py 和 kv 文件 应通过 main py main kv 中的 ScreenManager 选择屏幕 设计应从文件 screen X kv 加载 类等应从文件 screen X py 加载 Screens
  • 限制 django 应用程序模型中的单个记录?

    我想使用模型来保存 django 应用程序的系统设置 因此 我想限制该模型 使其只能有一条记录 极限怎么办 尝试这个 class MyModel models Model onefield models CharField The fiel
  • 如何读取Python字节码?

    我很难理解 Python 的字节码及其dis module import dis def func x 1 dis dis func 上述代码在解释器中输入时会产生以下输出 0 LOAD CONST 1 1 3 STORE FAST 0 x

随机推荐

  • 凯尔·辛普森 (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