首页 > 解决方案 > 将文件写入确切位置

问题描述

我的主要目标是在许多并行流中写入一个文件(例如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'被添加但在文件的末尾。我确信可以在文件中间的某处添加字符。任何人都可以帮助解决这个简单的问题吗?

或者也许有人知道如何并行执行?

帕维尔

标签: pythonpython-3.xfile

解决方案


正如这篇文章所建议的,以模式打开文件'a'将:

开放写作。如果文件不存在,则创建该文件。流位于文件的末尾。 对文件的后续写入将始终在文件的当前末尾结束,而与任何干预 fseek(3)或类似内容无关。

另一方面,该模式'r+'将让您:

开放阅读和写作。流位于文件的开头。

虽然没有明确提到,但这会让seek在不同的位置写入文件


无论如何,如果您要并行执行此操作,则必须控制资源。您不希望 2 个进程同时写入文件。关于该问题,请参阅此 SO question


推荐阅读