Python:写入大文件时,保持文件打开还是打开文件并根据需要追加到文件中?

2024-06-23

我想知道如何最好地处理 python 中的大文件写入。

我的Python代码多次循环运行外部程序(古老的Fortran,具有奇怪的输入文件格式),读取其输出(一行文件),进行一些非常简单的处理,然后写入编译后的输出文件。外部程序执行速度很快(远低于 1 秒)。

import subprocess as sp

f_compiled_out = open("compiled.output", "w") 

for i in range(len(large_integer)):

  write_input_for_legacy_program = prepare_input()

  sp.call(["legacy.program"])

  with open("legacy.output", "r") as f:
    input = f.readline()

  output = process(input)

  f_compiled_out.write(output)


close(f_compiled_out)

我可以想到三个选项来生成编译的输出文件。

  1. 我已经在做什么了。

  2. 使用 with 打开 f_compiled_outopen("comiled.output", "a") as f: f.write(output)在主循环的每个周期

  3. 使用 awk 进行简单处理并将输出放在“compiled.output”末尾。

那么(1)保持大文件打开并写入到其末尾与(2)每次写入时打开并附加到它与(3)使用 awk 进行处理和写入的开销是多少?cat建立“compiled.output”。

在任何阶段,整个输出都不需要存储在内存中。

附:如果有人能看到任何其他明显的事情,当 N_loops 变大时,这些事情会减慢速度,那也太棒了!


打开和关闭文件肯定是有成本的。但是,如果您的旧程序需要一秒或多秒才能响应,您可能不会注意到。

def func1():
    for x in range(1000):
        x = str(x)
        with open("test1.txt", "a") as k:
            k.write(x)

1 loops, best of 3: 2.47 s per loop

def func2():
    with open("test2.txt", "a") as k:
        for x in range(1000):
            x = str(x)
            k.write(x)

100 loops, best of 3: 6.66 ms per loop

但是,如果您的文件非常大,它会变得更慢:(800+mb)

def func3(file):
    for x in range(10):
        x = str(x)
        with open(file, "a") as k:
            k.write(x)

12kb 文件:

10 loops, best of 3: 33.4 ms per loop

800mb+ 文件:

1 loops, best of 3: 24.5 s per loop

保持文件打开状态主要会消耗内存。

我建议使用 SQlite 来存储数据。

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

Python:写入大文件时,保持文件打开还是打开文件并根据需要追加到文件中? 的相关文章

  • Python:访问另一个类中一个类的属性和方法

    假设我有两个 A 类和 B 类 Class A A s attributes and methods here Class B B s attributes and methods here 现在我可以评估 B 类对象中 A 的属性 如下所
  • Ruby 相当于 Python 的多处理模块是什么?

    为了在 Ruby 或 Python 中获得真正的并发性 我需要创建新的进程 Python 使用以下命令使这变得非常简单multiprocessing模块 它抽象了所有 fork wait 的好处 让我专注于我的代码 Ruby 有类似的东西吗
  • 使用 setuptools (pip) 时如何打印警告和错误

    我正在使用 setuptools 来打包代码 以便可以使用以下命令轻松安装它 cd project name pip install 在设置过程中 我想警告用户有关预先存在的配置文件的信息 并在系统上打印一些安装后说明 例如 etc pro
  • Python TypeError:不支持的操作数类型 -:“int”和“function”

    我是 Python 初学者 正在做一项作业 我不断得到TypeError unsupported operand type s for int and function 即使在研究了错误并应用了建议的修复之后 我并不是在寻找任何人给我一个解
  • 如何在嵌套列表中查找给定元素?

    这是我的迭代解决方案 def exists key arg if not arg return False else for element in arg if isinstance element list for i in elemen
  • 从 java 代码运行 Python 脚本

    这是我第一次在java中尝试python 我正在尝试从我的代码执行 python 脚本 如下所示 Process process Runtime getRuntime exec python C Users username Desktop
  • Django CollectStatic 启动大文件上传时管道损坏

    我正在尝试使用collectstatic将静态文件上传到我的S3存储桶 但我收到一个700k javascript文件的管道损坏错误 这就是错误 Copying Users wedonia work asociados server aso
  • 将 postgres 连接到 django 时遇到问题

    以下文档来自Django Postgres 文档 https docs djangoproject com en 4 1 ref databases postgresql notes我添加到我的settings py 在我设置的设置中 DA
  • dask分布式内存错误

    在分布式作业上运行 Dask 时 我在调度程序上遇到以下错误 distributed core ERROR Traceback most recent call last File usr local lib python3 4 dist
  • Python父类访问子私有变量

    以下代码会生成错误 class A object def say something self print self foo print self bar class B A def init self self foo hello sel
  • 将 gtk.DrawingArea 保存到文件

    我想使用 PIL 将 gtk DrawingArea 对象内容保存到 jpeg 文件 我特别想添加这个脚本 http pygstdocs berlios de pygst tutorial webcam viewer html制作照片的可能
  • 过滤给定范围内的坐标

    我有数百个带有地理位置的 out 文件 我将把它们批量导入到 SQLite 数据库中 但是 为了节省时间 我只会导入地理坐标在某些间隔内的线 文件是这样的 value value longitude latitude value value
  • 如何循环遍历列表中除最后一项之外的所有项? [复制]

    这个问题在这里已经有答案了 Using a for循环 如何循环遍历列表中除最后一项之外的所有项 我想遍历一个列表 检查每个项目与后面的项目 我可以在不使用索引的情况下做到这一点吗 for x in y 1 If y是一个生成器 那么上面的
  • Python httplib 和 POST

    我目前正在使用别人编写的一段代码 它用httplib向服务器发出请求 它以正确的格式提供所有数据 例如消息正文 标头值等 问题是 每次尝试发送 POST 请求时 数据都在那里 我可以在客户端看到它 但没有任何内容到达服务器 我已经阅读了库规
  • 训练某些网络时,Keras(Tensorflow 后端)在 GPU 上比在 CPU 上慢

    我很难理解为什么 GPU 和 CPU 速度在小规模网络中相似 CPU 有时更快 而 GPU 在大规模网络中更快 问题底部的代码在 i7 6700k 上运行时间为 103 7 秒 但使用tensorflow gpu 时 代码运行时间为 29
  • Spacy-nightly (spacy 2.0) 问题“thinc.extra.MaxViolation 大小错误”

    显然成功安装了 spacy nightly spacy nightly 2 0 0a14 和英语模型 en core web sm 后 我在尝试运行它时仍然收到错误消息 import spacy nlp spacy load en core
  • 如何隐藏 Tkinter python Gui

    有人知道如何隐藏 python GUI Tkinter 我已经创建了键盘记录器 对于 GUI 我使用了 python 模块 Tkinter 我想添加名为 HIDE 的按钮 因此当用户单击它时 它将隐藏 GUI 当用户按下 CTRL E 之类
  • Python for 循环前瞻

    我有一个 python for 循环 其中我需要向前查看一项以查看在处理之前是否需要执行某项操作 for line in file if the start of the next line 0 perform pre processing
  • 合并大文件的最佳方法是什么?

    我必须合并数千个大文件 每个大约 200MB 我想知道合并这些文件的最佳方法是什么 行将有条件地复制到合并文件中 可以使用 File AppendAllLines 或使用 Stream CopyTo 吗 使用 File AppendAllL
  • ValueError:序列太大;不能大于 32

    我写了这段代码 from Crypto Cipher import AES import numpy as np import cv2 base64 BLOCK SIZE 16 PADDING pad lambda s s BLOCK SI

随机推荐

  • 如何使用 APScheduler 设置作业的持续时间限制?

    我用 max instances 10 设置调度程序 可以同时运行10个作业 有时有些作业被阻塞 它会挂在那里 当超过10个作业在那里阻塞时 跳过 运行的最大数量 的例外实例达到 10 APScheduler 是否有办法设置作业持续时间的最
  • 全局 Git 忽略

    我想将 Git 设置为全局忽略某些文件 我添加了一个 gitignore文件到我的主目录 Users me 并且我添加了以下行 tmproj 但它并没有忽略这种类型的文件 知道我做错了什么吗 您需要设置您的全局core excludesfi
  • 如何循环遍历sql中的json数组以选择特定索引处的值

    我有一个存储过程 用于查询数据库并将结果存储在 Json 变量中 现在我想按索引循环遍历 Json 数组以获取特定值 有人可以告诉我如何实现这一目标吗 以下是我的查询 DECLARE json NVARCHAR Max DECLARE na
  • Mac 加载命令损坏

    在我们的一个应用程序上签名 代码设计 失败malformed object unknown load command 9 在网上做了一些研究后 我发现加载命令是可执行文件头中的特殊命令 内核使用它们来进行段加载 http 0xfe blog
  • @objc 协议使 swift 编译器崩溃

    我写了我的协议 旨在有一些 optional方法 但 swift 编译器崩溃了 这有效 protocol SessionDelegate TODO these should all be optional func willOpenSess
  • 比较两个文件的各自字段并以特定格式输出所需的内容

    我正在比较两个文件 food1 txt 文件并比较 food2 txt 文件 如下所示 cat food1 txt pizza 1ea chicken 5ea tooboo 4ea orange 2ea cat food2 txt pizz
  • Windows Phone 7 上的 App.config?

    各位 我正在 Windows Phone 7 上构建一个应用程序 我的应用程序需要一些配置 例如 Web 服务 URL 数据库名称 这些配置可能会在部署期间随时需要更改 但我不想重新构建应用 在WPF应用程序中 我经常将这些配置保存在App
  • fetch get 请求返回空标头

    Headers was indeed sent via http However fetch returned empty headers 事实证明我需要设置Access Control Expose Headers包含我想公开的标题
  • pip 安装在共享目录上(Windows)

    我尝试创建自己的 Pypi 存储库 尊重https www python org dev peps pep 0503 https www python org dev peps pep 0503 我的想法是将其放在共享目录中 我使用的是 W
  • 放大发布导致 AccessDenied 错误

    我部署了一个简单的网络应用程序S3 via amplify publish 主办方有Cloudfront启用 我在设置托管时选择了放大中的 PROD 环境 并且我正在工作eu central 1地区 但每当我尝试访问Cloudfront网址
  • sed:替换文本块

    我有一堆文件 从一段代码开始 我试图用另一个代码块替换 Replace
  • 安装软件包时出现无法加载软件包 %s 错误

    我正在 Delphi 2007 上进行测试 我的小组项目由 2 个包组成 包运行 bpl 它被标记为 仅运行时 并包含一个名为 uMyTestRun pas 的单元 其中定义了一个空的 TFrame 后代 unit uMyTestRun i
  • NoSuchMethodError:org.slf4j

    我正在将storm与python一起使用 我使用此命令在本地运行拓扑 mvn compile exec java Dexec classpathScope compile Dexec mainClass my Topology 并得到这个错
  • 使用 Authlogic 仅使用用户名进行身份验证

    有一个基于 Java Struts 的母应用程序 它也处理身份验证 我的 Rails 应用程序正在集成到母应用程序中 它使用 authlogic 当然 要求是 一旦有人登录到母应用程序 他们应该能够自动访问我的 Rails 应用程序 而无需
  • Linux - 查找特定文件之后和之前的文件

    我试图在我的计算机上查找特定文件创建前 1 小时和创建后 1 小时创建的文件 这是我尝试过的方法 find root newermt 2012 10 04 1800 and newermt 2012 10 04 2000 exec ls l
  • ins SpriteKit,“选择”我的手指在移动时触摸到的所​​有精灵

    所以我尝试学习 SpriteKit 同时构建一个我认为简单的益智游戏 我有一个 5x5 网格的不同颜色的 SKSpriteNode 我想要的是能够触摸一个节点 然后水平或垂直移动我的手指并检测我的手指正在触摸的所有节点 就像我正在 选择 它
  • 让列在 CSS 网格中换行

    使用时如何指定最大列数display grid 当内容对于空间来说太宽 或小于最小尺寸 时它会自动中断 有没有办法在没有媒体查询的情况下做到这一点 例如 当没有足够的内容空间时 我有以下内容不会中断为单列模式 grid display gr
  • Drupal - 在模板内渲染子视图/部分

    如何创建一个可以在多个模板页面中重复使用并且可以将变量传递到其中的 html 片段 有些像这样 但显然更复杂一些 ul li li ul Thanks Use hook theme http api drupal org api drupa
  • 仅从 URL 获取 URI 段

    我正在尝试使用正则表达式获取 URI 段 示例 URI http abc com hello hi bye humm ok hi ya yaya wow waaah 我在尝试 lt w r g 但它不能正常工作 查询字符串没有被排除 wow
  • Python:写入大文件时,保持文件打开还是打开文件并根据需要追加到文件中?

    我想知道如何最好地处理 python 中的大文件写入 我的Python代码多次循环运行外部程序 古老的Fortran 具有奇怪的输入文件格式 读取其输出 一行文件 进行一些非常简单的处理 然后写入编译后的输出文件 外部程序执行速度很快 远低