【发布时间】:2016-04-23 19:44:17
【问题描述】:
当一个新手(像我一样)要求在 python 中读取/处理一个文本文件时,他经常得到如下答案:
with open("input.txt", 'r') as f:
for line in f:
#do your stuff
现在我想在特殊行之后截断正在读取的文件中的所有内容。修改上面的示例后,我使用:
with open("input.txt", 'r+') as file:
for line in file:
print line.rstrip("\n\r") #for debug
if line.rstrip("\n\r")=="CC":
print "truncating!" #for debug
file.truncate();
break;
并期望它在看到第一个“CC”之后扔掉所有东西。在 input.txt 上运行此代码:
AA
CC
DD
在控制台上打印以下内容(如预期的那样):
AA
CC
truncating!
但文件“input.txt”保持不变!?!?
怎么可能?我做错了什么?
编辑:操作后我希望文件包含:
AA
CC
【问题讨论】:
-
您正在从文件末尾截断,因此您需要寻找文件中的正确位置,例如
file.seek(0); file.truncate() -
@SirParselot 我想在“CC”之后截断文件,在
file.seek(0)之后,整个信息都会消失! -
这就是为什么我说了类似的话。您需要在 CC 之后立即在文件中找到该点并找到该点
-
@SirParselot 也许我的期望是错误的,但我希望在每次读取一行时移动当前位置并在读取“CC”后截断文件(因为当前位置变为“正确" 位置)
标签: python file python-2.7 python-3.x truncation