python 中文件打开模式求解?

2016-03-19 10:54:40 +08:00
 import111111
python 中打开一个自定义的日志文件,此文件设定了大小限制。
要求:
当写入的数据大于此限制时,从文件开头开始覆盖原记录(每行记录长度相等),那么应该以什么模式打开此文件,才能做到:
a. 如果没有此文件则新建;
b. 如果有,不清空原文件。文件大小小于限制时,在文件末尾处添加;
c . 如果有且大小超过其限制时,不清空原文件并在文件开始处覆盖原记录?

代码示例:
with open('test.txt','w+') as f: # w+ 在打开文件时会清空原文件
f.seek(0)
i,j = 0,100
stand = '中华人民共和国:{:10d}\n' # 确保每个记录长度一致
while i < j:
f.write(stand.format(i))
i += 1
if f.tell() >= 128:
f.seek(0)
1944 次点击
所在节点    Python
7 条回复
import111111
2016-03-20 11:12:45 +08:00
消灭零回复:
import111111
2016-03-20 11:13:50 +08:00
消灭零回复:
难道要将文件打开后复制数据再删除再重新创建 a+?
import111111
2016-03-22 10:50:02 +08:00
!
billgreen1
2016-03-24 00:23:54 +08:00
可不可以这样:打开文件,读取内容,存到指定长度的 deque ,以后有新数据就往 deque 里面存,最后写入文件,关闭文件。
import111111
2016-03-24 10:15:06 +08:00
os.fdopen(os.open('/tmp/nn', os.O_CREAT | os.O_WRONLY), 'w')
import111111
2016-03-24 10:15:50 +08:00
model = 'r+' if os.path.exists(path) else 'w+'
with open (path,model) as f: pass
import111111
2016-03-24 10:16:33 +08:00
model = 'r+' if os.path.exists(path) else 'w+'
with open (path,model) as f: pass
@import111111

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/264673

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX