Python3 中 readline() 方法 和 truncate() 方法的一些问题
最近,在学习Python时,看到网上编辑的学生信息系统的构建,对其中修改学生信息的函数深入看了下,过程代码如下:
with open('test.txt','r+') as f:
discard = input("delete the info you want:")
lines = f.readlines()
f.seek(0)
for line in lines:
if discard not in line:
f.write(line)
else:
print("Delete successfully!")
print(line,end='')
f.truncate()
发现其中有个truncate()方法,仔细在网上查了下,该方法的主要作用如下:
- truncate(size) 表示从文件的首行首字节开始截断,截断文件为 size 个字节
- truncate() 表示 从当前位置截断;截断之后面的所有字节被删除
针对该方法做了一些测试,发现之前学习的文件操作方法realine() 方法,似乎不适用truncate()方法。
readline()方法是读取一行文件的内容,如果没记错的话,读取一行后,文件的指针将移动到下一行。例如:
# 文本内容为:
我是第一行
我是第二行
我是第三行
我是第四行
我是第五行
>>> f = open(r'C:\Users\Administrator\Desktop\test.txt','r+')
>>> a = f.readline()
>>> print(a)
我是第一行
>>> f.tell() # 告诉指针位置
12
但是,调用truncate() 方法后,并没有将文本中剩下的内容删除。
# 文本内容为:
我是第一行
我是第二行
我是第三行
我是第四行
我是第五行
>>> f = open(r'C:\Users\Administrator\Desktop\test.txt','r+')
>>> a = f.readline()
>>> print(a)
我是第一行
>>> f.tell() # 告诉指针位置
12
>>> f.truncate()
58
>>> b = f.readline()
>>> print(b)
我是第二行
其中显示了58,表示截取了58个字符,似乎是文件指针到了第五行末尾,所以,没有作任何的删除。
之后又测试了seek()方法和write()方法,发现都能够实现truncate()方法的功能。不知道具体原因是什么,欢迎大家来探讨~~
# 文本内容为:
我是第一行
我是第二行
我是第三行
我是第四行
我是第五行
>>> f = open(r'C:\Users\Administrator\Desktop\test.txt','r+')
>>> a = f.readline()
>>> print(a)
我是第一行
>>> f.tell() # 告诉指针位置
12
>>> f.truncate()
58
>>> b = f.readline()
>>> print(b)
我是第二行
>>> f.seek(12) # 将文件指针移动到第12个字符
12
>>> f.truncate() # 将文件第12个字符之后所有字符删除
12
>>> f.readlines() # 指针仍在第12个字符,读取第12个字符之后的所有字符,为空。
[]
>>>