我现在这样做,但我希望它在文件的开头写.
f = open('out.txt', 'a') # or 'w'?
f.write("string 1")
f.write("string 2")
f.write("string 3")
f.close()
Run Code Online (Sandbox Code Playgroud)
所以内容out.txt将是:
string 3
string 2
string 1
Run Code Online (Sandbox Code Playgroud)
而不是(像这样的代码):
string 1
string 2
string 3
Run Code Online (Sandbox Code Playgroud)
ktd*_*drv 13
看看这个问题.那里有一些解决方案.
虽然我可能会像Daniel和MAK那样建议 - 也许会做一个小小的课程,让事情变得更加灵活和明确:
class Prepender:
def __init__(self, fname, mode='w'):
self.__write_queue = []
self.__f = open(fname, mode)
def write(self, s):
self.__write_queue.insert(0, s)
def close(self):
self.__exit__(None, None, None)
def __enter__(self):
return self
def __exit__(self, type, value, traceback):
if self.__write_queue:
self.__f.writelines(self.__write_queue)
self.__f.close()
with Prepender('test_d.out') as f:
f.write('string 1\n')
f.write('string 2\n')
f.write('string 3\n')
Run Code Online (Sandbox Code Playgroud)
你可以f.seek(0)在每次写入之间抛出一个(或者写一个为你做的包装函数),但是没有简单的内置方法来做到这一点.
编辑:这不起作用,即使你放在f.flush()那里它会不断覆盖.您可能只需排队写入并自行撤消订单.
而不是
f.write("string 1")
f.write("string 2")
f.write("string 3")
Run Code Online (Sandbox Code Playgroud)
也许做类似的事情:
writeList = []
writeList.append("string 1\n")
writeList.append("string 2\n")
writeList.append("string 3\n")
writeList.reverse()
f.writelines(writeList)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33828 次 |
| 最近记录: |