如何打开文件进行读写?

big*_*hat 179 python file-io file

有没有办法打开文件进行读写?

作为一种解决方法,我打开文件进行写入,关闭它,然后再次打开它进行读取.但是,有没有办法打开一个文件阅读和写作?

Fli*_*imm 245

以下是您如何读取文件,然后写入文件(覆盖任何现有数据),而无需关闭和重新打开:

with open(filename, "r+") as f:
    data = f.read()
    f.seek(0)
    f.write(output)
    f.truncate()
Run Code Online (Sandbox Code Playgroud)

  • 使用`a +`来覆盖文件不存在的最终用例(将被创建) (34认同)
  • seek()和truncate()都很关键! (15认同)
  • 最好解释一下为什么在这里使用`seek`和`truncate`。大多数读者来自Google并进行复制粘贴。 (4认同)
  • @JossefHarush请注意,某些Unix系统上"a`状态"的文档意味着所有写入都附加到文件的末尾,而不管当前的搜索位置如何.在这种情况下,`f.seek(0)`将无法按预期工作.我刚刚在Linux上犯了这个错误. (3认同)
  • 这比先打开仅读取“r”,关闭,然后打开写入“w”更快吗? (3认同)
  • 读取文件后,文件指针(fp)向前移动,因此需要将其设置为开头。这就是`seek(0)`所做的:它将fp放置到位置'0'(*即*开头)。truncate()将文件截断为提供的字节数,* ie *在指定的字节数后删除所有文件内容。假设您的文件中包含字符串“ Hello,world”,而您写的是“ Bye”。如果您不执行truncate(),则最后的内容将是“ Byelo,world”,因为您从未删除过文件中存在的文本。truncate()将文件截断为当前fp。 (2认同)

Alg*_*bra 152

总结 I/O 行为

|          Mode          |  r   |  r+  |  w   |  w+  |  a   |  a+  |
| :--------------------: | :--: | :--: | :--: | :--: | :--: | :--: |
|          Read          |  +   |  +   |      |  +   |      |  +   |
|         Write          |      |  +   |  +   |  +   |  +   |  +   |
|         Create         |      |      |  +   |  +   |  +   |  +   |
|         Cover          |      |      |  +   |  +   |      |      |
| Point in the beginning |  +   |  +   |  +   |  +   |      |      |
|    Point in the end    |      |      |      |      |  +   |  +   |
Run Code Online (Sandbox Code Playgroud)

和决策分支

在此处输入图片说明

  • 这里的“盖”是什么意思? (14认同)
  • 树形图是用什么软件画的? (9认同)
  • 这里的“截断”是什么意思? (7认同)
  • @ConorJamesThomasWarfordHen 在这种情况下“截断”意味着“将文件截断到长度为 0”。即删除文件以前的所有内容并在打开时以空文件开始。 (2认同)

小智 43

r+是同时读写的规范模式.这与使用fopen()系统调用没有什么不同,因为file()/ open()它只是这个操作系统调用的一个小包装器.

  • 它附加文件内容,而不是从头开始写入 (3认同)

Art*_*nka 20

我尝试过类似的东西,它按预期工作:

f = open("c:\\log.log", 'r+b')
f.write("\x5F\x9D\x3E")
f.read(100)
f.close()
Run Code Online (Sandbox Code Playgroud)

哪里:

f.read(size) - 要读取文件的内容,请调用f.read(size),它读取一些数据并将其作为字符串返回.

和:

f.write(string)将string的内容写入文件,返回None.

此外,如果您打开有关读取和写入文件的Python教程,您会发现:

'r +'打开文件进行读写.

在Windows上,附加到模式的'b'以二进制模式打开文件,因此还有'rb','wb'和'r + b'等模式.

  • 另外读取然后使用'r + b'模式也能很好地工作,但你必须在f.read()和f.write()之间使用f.seek(0)将光标放回文件的开头. (4认同)
  • 请注意,如果您正在写入的数据不长于已经存在的数据,则它不会被截断。使用 `truncate` 方法来阻止这种情况。 (2认同)