Python3 中 readline() 方法 和 truncate() 方法的一些问题

本文介绍了在学习Python时遇到的关于`readline()`和`truncate()`方法的问题。`truncate()`用于从文件开头截断文件至指定长度,而`readline()`读取一行后会移动文件指针。在使用`truncate()`后,若文件指针在行中间,不会删除后续内容。同时提到了`seek()`和`write()`方法同样能实现文件截断功能,引发对两者关系的思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()方法,仔细在网上查了下,该方法的主要作用如下:

  1. truncate(size) 表示从文件的首行首字节开始截断,截断文件为 size 个字节
  2. 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个字符之后的所有字符,为空。
[]
>>> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值