我编写了一个python程序来连续写入文件。
#!/usr/bin/python
import sys
import time
file = open("data",'w')
i = 1
while True:
file.write("%d\n" % i)
file.flush()
i+=1
time.sleep(0.01)
过了一段时间,data
文件的大小不是0。然后python写程序仍在运行。我尝试echo "" > data
命令清空现有内容。
但它不起作用。一旦python程序继续将数据写入文件,文件大小仍然保持不变。
如何解决这个问题?
答案 0 :(得分:0)
您应该以{{1}}模式打开文件,并使用append
删除旧内容:
truncate()
然后在运行此代码时,您可以执行以下操作:
#!/usr/bin/python
import sys
import time
file = open("data",'a')
file.truncate()
i = 1
while True:
file.write("%d\n" % i)
file.flush()
i+=1
time.sleep(0.01)
从你的shell 随时截断文件到0字节没有空字节被文件搜索添加。
以附加模式打开文件(作为模式的第一个字符)会导致对此流的所有后续写入操作在文件结束时发生,从而避免将先前位置填充为空字节的情况。
答案 1 :(得分:0)
每次写入后都可以关闭文件 这将为其他编程(umount,rm,mv,du)提供处理数据的公平机会 我不确定开销,系统缓存可能对你有很多帮助。
答案 2 :(得分:0)
echo "" > data
会清除文件。由于循环内的睡眠持续时间为0.01秒,因此会立即向文件添加新内容。
这在此处可见(文件中的字符数减少)
$ wc data
4336 4335 27733 data
$ echo "" > data
$ wc data
176 175 29848 data
如果你增加睡眠持续时间,则非常清楚
$ wc data
11 10 69 data
$ echo "" > data
$ wc data
1 0 1 data
这在文件大小减小
中也可见$ ls -l data
-rw-rw-r-- 1 user user 14 Sep 9 15:33 data
$ echo "" > data; ls -l data
-rw-rw-r-- 1 user user 1 Sep 9 15:33 data