有没有办法打开一个文件进行读写?
作为一种解决方法,我打开文件进行写入,关闭它,然后再次打开它进行读取。但是有没有办法打开一个文件进行读写?
mmap
mmap
是个好主意,但是如果您必须处理并发怎么办?有没有办法保留访问权限?
以下是读取文件,然后写入文件(覆盖任何现有数据)的方式,无需关闭并重新打开:
with open(filename, "r+") as f:
data = f.read()
f.seek(0)
f.write(output)
f.truncate()
总结 I/O 行为
模式 r r+ w w+ a a+ Read + + + + Write + + + + + Create + + + + Cover + + Point in the beginning + + + + Point in end + +
和决策分支
https://i.stack.imgur.com/t4k06.png
r+
是同时读取和写入的规范模式。这与使用 fopen()
系统调用没有什么不同,因为 file()
/ open()
只是这个操作系统调用的一个小包装。
open
是系统调用,fopen
不是系统调用。 fopen
是 open
的包装。
我已经尝试过这样的事情,它按预期工作:
f = open("c:\\log.log", 'r+b')
f.write("\x5F\x9D\x3E")
f.read(100)
f.close()
在哪里:
f.read(size) - 要读取文件的内容,调用 f.read(size),它会读取一定数量的数据并将其作为字符串返回。
和:
f.write(string) 将 string 的内容写入文件,返回 None。
此外,如果您打开 Python tutorial about reading and writing files,您会发现:
'r+' 打开文件进行读写。在 Windows 上,附加到模式的 'b' 以二进制模式打开文件,因此还有 'rb'、'wb' 和 'r+b' 等模式。
truncate
方法停止此操作。
不定期副业成功案例分享
a+
覆盖文件不存在的最终情况(将被创建)a
的文档声明“在某些 Unix 系统上,意味着所有写入都附加到文件末尾,而不管当前的查找位置如何”。在这种情况下,f.seek(0)
将无法按预期工作。我刚刚在 Linux 上遇到了这个问题。seek
和truncate
。大多数读者来自谷歌并进行复制粘贴。seek(0)
所做的:它将 fp 放置到位置0
(ie 开头)。truncate()
将文件截断到提供的字节数,ie 删除指定字节数之后的所有文件内容。假设您的文件有字符串Hello, world
,而您编写了Bye
。如果您不truncate()
,最后的内容将是Byelo, world
,因为您从未删除文件中存在的文本。truncate()
将文件截断为当前 fp。