我在做一些文件IO时偶然发现了这个stackoverflow问题:被python文件模式“ w +”弄糊涂了
r阅读w用于写作r+打开以进行读写(无法截断文件)w+用于读写(可以截断文件)rb+读取或写入二进制文件wb+编写二进制文件a+打开进行追加
请注意,r+不能截断文件。因此,我一直在寻找可以在读取文件后截断文件的东西,这导致我转到了另一个SO链接:Python在读取行时截断了行
我看到他们使用了另一种模式rw+,该模式没有记录。从答案中使用它的方式来看,我猜想它的意思是“开放供阅读,书写和截断,但不截断开放”。
后来我测试了这种模式,似乎它已在Python 3中删除,因此ValueError在使用时抛出了一个:
Python 2:
f = open("myfile.txt", "rw+")
text = f.read()
f.truncate(0)
f.close()
Run Code Online (Sandbox Code Playgroud)
Python 3:
f = open("myfile.txt", "rw+")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: must have exactly one of create/read/write/append mode
Run Code Online (Sandbox Code Playgroud)
但是,我需要Python 3中的文件模式,该文件模式可以截断和读取,但不能在打开时截断。因此,经过更多测试,我发现它r+实际上可以在Python 2和3中截断。
Python 2:
f = open("myfile.txt", "r+")
text = f.read()
f.truncate(0) …Run Code Online (Sandbox Code Playgroud) 如何从存储在文件中的进程列表中运行第一个进程并立即删除第一行,就好像该文件是一个队列并且我调用了“pop”一样?
我想以类似流行的方式调用简单文本文件中列出的第一个命令,并使用 \n 作为分隔符:
图1:
cmdqueue.lst :
proc_C1
proc_C2
proc_C3
.
.
Run Code Online (Sandbox Code Playgroud)
图2:
通过以下方式弹出第一个命令popcmd:
proc_A | proc_B | popcmd cmdqueue.lst | proc_D
Run Code Online (Sandbox Code Playgroud)
图3:
cmdqueue.lst :
proc_C2
proc_C3
proc_C4
.
.
Run Code Online (Sandbox Code Playgroud)