Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何打开文件进行读写?_Python_File_File Io - Fatal编程技术网

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函数中使用一个文件描述符有什么好处吗?@RomanBodnarchuk
mmap
是个好主意,但是如果必须处理并发性呢?有没有办法保留访问权限?您正在解决什么问题?也许有比写/读文件更好的解决方案,例如,
mmap
你能给我们你的代码吗,这样我们就可以回答你了。您也可以尝试查看:。然而,我已经尝试使用r+b,它是有效的。在diff函数中使用一个文件描述符有什么好处吗?@RomanBodnarchuk
mmap
是个好主意,但是如果必须处理并发性呢?是否有保留访问权限的方法?使用“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()
将文件截断为提供的字节数,即删除指定字节数之后的所有文件内容