Python 如何打开文件进行读写?
有没有一种方法可以同时打开文件进行读写Python 如何打开文件进行读写?,python,file,file-io,Python,File,File Io,有没有一种方法可以同时打开文件进行读写 作为一种解决方法,我打开文件进行写入,关闭它,然后再次打开它进行读取。但是有没有一种方法可以同时打开文件进行读写呢?r+是同时进行读写的标准模式。这与使用fopen()。这与使用fopen() f = open("c:\\log.log", 'r+b') f.write("\x5F\x9D\x3E") f.read(100) f.close() 其中: f、 read(size)-要读取文件的内容,请调用f.read(size),其中 读取一定数量的数据
作为一种解决方法,我打开文件进行写入,关闭它,然后再次打开它进行读取。但是有没有一种方法可以同时打开文件进行读写呢?
r+
是同时进行读写的标准模式。这与使用fopen()。这与使用fopen()
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)将字符串的内容写入文件,返回
没有
此外,如果打开,您会发现:
“r+”打开文件进行读取和写入
在Windows上,附加到模式的“b”以二进制模式打开文件,因此
还有诸如“rb”、“wb”和“r+b”等模式
我尝试过类似的方法,效果如预期:
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)将字符串的内容写入文件,返回
没有
此外,如果打开,您会发现:
“r+”打开文件进行读取和写入
在Windows上,附加到模式的“b”以二进制模式打开文件,因此
还有诸如“rb”、“wb”和“r+b”等模式
以下是在不关闭和重新打开的情况下读取文件,然后写入(覆盖任何现有数据)的方式:
with open(filename, "r+") as f:
data = f.read()
f.seek(0)
f.write(output)
f.truncate()
以下是在不关闭和重新打开的情况下读取文件,然后写入(覆盖任何现有数据)的方式:
with open(filename, "r+") as f:
data = f.read()
f.seek(0)
f.write(output)
f.truncate()
总结I/O行为
| Mode | r | r+ | w | w+ | a | a+ |
| :--------------------: | :--: | :--: | :--: | :--: | :--: | :--: |
| Read | + | + | | + | | + |
| Write | | + | + | + | + | + |
| Create | | | + | + | + | + |
| Cover | | | + | + | | |
| Point in the beginning | + | + | + | + | | |
| Point in the end | | | | | + | + |
以及决策科
总结I/O行为
| Mode | r | r+ | w | w+ | a | a+ |
| :--------------------: | :--: | :--: | :--: | :--: | :--: | :--: |
| Read | + | + | | + | | + |
| Write | | + | + | + | + | + |
| Create | | | + | + | + | + |
| Cover | | | + | + | | |
| Point in the beginning | + | + | + | + | | |
| Point in the end | | | | | + | + |
以及决策科
您正在解决什么问题?也许有比写/读文件更好的解决方案,例如,mmap
你能给我们你的代码吗,这样我们就可以回答你了。您也可以尝试查看:。然而,我已经尝试使用r+b,它是有效的。在diff函数中使用一个文件描述符有什么好处吗?@RomanBodnarchukmmap
是个好主意,但是如果必须处理并发性呢?有没有办法保留访问权限?您正在解决什么问题?也许有比写/读文件更好的解决方案,例如,mmap
你能给我们你的代码吗,这样我们就可以回答你了。您也可以尝试查看:。然而,我已经尝试使用r+b,它是有效的。在diff函数中使用一个文件描述符有什么好处吗?@RomanBodnarchukmmap
是个好主意,但是如果必须处理并发性呢?是否有保留访问权限的方法?使用“r+b”模式时,读写操作也同样有效,但必须在f.read()和f.write()之间使用f.seek(0)将光标放回文件的开头。请注意,如果正在写入的数据不再是已经存在的数据,它将不会被截断。使用truncate
方法停止此操作。同时,使用“r+b”模式进行读写操作也同样有效,但必须在f.read()和f.write()之间使用f.seek(0)将光标放回文件的开头。请注意,如果正在写入的数据的长度不超过已有的数据,则不会被截断。使用truncate
方法停止此操作。使用a+
覆盖文件不存在(将创建)的结束情况seek()和truncate()都是关键@JossefHarush注意到,a
的文档说明“在某些Unix系统上,意味着所有写入都附加到文件的末尾,而不管当前查找位置如何”。在这种情况下,f.seek(0)
将无法按预期工作。我刚刚在Linux上发现了这个问题。你最好解释一下为什么这里使用seek
和truncate
。大多数阅读器都来自谷歌并进行复制粘贴。读取文件后,文件指针(fp)向前移动,因此需要将其设置为开头。这就是seek(0)
的作用:它将fp置于0
(即开始)位置truncate()
将文件截断为提供的字节数,即删除指定字节数之后的所有文件内容。假设您的文件包含字符串Hello,world
,然后您编写Bye
。如果不truncate()
则结尾的内容将是Byelo,world
,因为您从未删除文件中存在的文本truncate()
将文件截断为当前fp。使用a+
覆盖文件不存在(将创建)的最终情况seek()和truncate()都是关键@JossefHarush注意到,a
的文档说明“在某些Unix系统上,意味着所有写入都附加到文件的末尾,而不管当前查找位置如何”。在这种情况下,f.seek(0)
将无法按预期工作。我刚刚在Linux上发现了这个问题。你最好解释一下为什么这里使用seek
和truncate
。大多数阅读器都来自谷歌并进行复制粘贴。读取文件后,文件指针(fp)向前移动,因此需要将其设置为开头。这就是seek(0)
的作用:它将fp置于0
(即开始)位置truncate()
将文件截断为提供的字节数,即删除指定字节数之后的所有文件内容