python - 将文件写入确切位置
问题描述
我的主要目标是在许多并行流中写入一个文件(例如file.txt
),每个流应该从文件的定义偏移量开始。
示例:
脚本 1 - 从位置 0 写入 10 个字符
脚本 2 - 从位置 10
写入 10 个字符 脚本 3 - 从位置 20 写入 10 个字符
我什至没有达到并行性,因为我被困在写入文件的不同偏移量上。我创建了一个简单的脚本来检查我的想法:
file = open("sample_file.txt", "w")
file.seek(100)
file.write("new line")
file.close()
好的,所以文件被创建,偏移被移动到100
并添加了句子'new line'
。成功。
但后来我想打开同一个文件并用 offsett 添加一些东西10
:
file = open("sample_file.txt", "w")
file.seek(100)
file.write("new line")
file.close()
file = open("sample_file.txt", "a")
file.seek(10)
file.write("second line")
file.close()
并且句子'second line'
被添加但在文件的末尾。我确信可以在文件中间的某处添加字符。任何人都可以帮助解决这个简单的问题吗?
或者也许有人知道如何并行执行?
帕维尔
解决方案
正如这篇文章所建议的,以模式打开文件'a'
将:
开放写作。如果文件不存在,则创建该文件。流位于文件的末尾。 对文件的后续写入将始终在文件的当前末尾结束,而与任何干预 fseek(3)或类似内容无关。
另一方面,该模式'r+'
将让您:
开放阅读和写作。流位于文件的开头。
虽然没有明确提到,但这会让你seek
在不同的位置写入文件
无论如何,如果您要并行执行此操作,则必须控制资源。您不希望 2 个进程同时写入文件。关于该问题,请参阅此 SO question。
推荐阅读
- python - 将 Sparkline 添加到 Pandas 数据框
- scheduled-tasks - 将事件日志详细信息获取到由计划任务启动的 powershell 脚本中
- google-cloud-platform - 是否可以将相同的 url 结构映射到多个云运行服务?
- python - 我在 python discord bot 教程中遇到错误
- reactjs - CanvasJS React - 如何在处理点击事件的同时使饼图切片突出显示(又名爆炸)
- jquery - 为什么 rowReorder 数据表不起作用?
- java - 我应该如何添加 Java 类文件?
- kubernetes - kubectl 删除具有部署名称的 pod
- cypress - 链接 cy.visit() 后无法查看 json 数据
- sql - Impala - 如何比较时间戳和日期