在python中,打开文件进行操作时可以提供一些标志.我有点困惑在于找到一个允许我在不截断的情况下随机写入的组合.我正在寻找的行为等同于C:如果它不存在则创建它,否则,打开写入(不截断)
open(filename, O_WRONLY|O_CREAT)
Python的文档令人困惑(对我而言):"w"将首先截断文件,"+"应该意味着更新,但"w+"无论如何都会截断它.无论如何要实现这一点而不诉诸低级os.open()接口?
注意:"a"或者"a+"也不起作用(如果我在这里做错了,请更正)
cat test.txt
eee
with open("test.txt", "a+") as f:
f.seek(0)
f.write("a")
cat test.txt
eeea
Run Code Online (Sandbox Code Playgroud)
是这样,追加模式坚持写到最后?
Rem*_*ich 10
你可以用 os.open 做到这一点:
import os
f = os.fdopen(os.open(filename, os.O_RDWR | os.O_CREAT), 'rb+')
Run Code Online (Sandbox Code Playgroud)
现在您可以在文件中间读取、写入、查找等。它会创建文件。在 Python 2 和 3 上测试。
你应该在rb+模式下打开.
with open("file", "rb+") as file:
file.write(b"...")
Run Code Online (Sandbox Code Playgroud)
在Python 2上,您可以使用r+替代文本模式,但您不应该因为它可以更改您编写的文本的长度.
Pad*_*ham -3
您需要使用"a"追加,如果文件不存在,它将创建该文件,如果存在,它将追加到该文件。
您无法使用追加执行您想要的操作,因为当您调用 write 方法时指针会自动移动到文件末尾。
您可以检查文件是否存在,然后在所需的行号上插入一行fileinput.input。inplace=True
import fileinput
import os
def random_write(f, rnd_n, line):
if not os.path.isfile(f):
with open(f, "w") as f:
f.write(line)
else:
for ind, line in enumerate(fileinput.input(f, inplace=True)):
if ind == rnd_n:
print("{}\n".format(line) + line, end="")
else:
print(line, end="")
Run Code Online (Sandbox Code Playgroud)
http://linux.die.net/man/3/fopen
a+ 打开以进行读取和追加(写入文件末尾)。如果文件不存在,则创建该文件。读取的初始文件位置位于文件的开头,但输出始终附加到文件的末尾。
fileinput 会f.bak复制您传入的文件,并在输出关闭时将其删除。如果您指定备份扩展名,backup=."foo"则将保留备份文件。
| 归档时间: |
|
| 查看次数: |
3714 次 |
| 最近记录: |