python中的f.truncate()函数

本文探讨了Python中的f.truncate()函数,用于截取文件到指定大小。通过实例解析了该函数的工作原理,指出了一些常见误解,如参数实际表示的是截取的尺寸而非位置。同时,强调了在不同文件模式下使用该函数的注意事项,特别是在文本文件中可能遇到的错误。建议在使用时配合f.seek(0,2)找到文件末尾,并在rb+模式下操作以避免错误。
部署运行你感兴趣的模型镜像

  今天要用到f.truncate函数, 但对其功能不是很熟悉, 就查了一下资料.
  先是在idle中打开了一个文件, 用help(f.truncate)查看一下:

>>> help(f.truncate)
Help on built-in function truncate:

truncate(pos=None, /) method of _io.BufferedWriter instance
    Truncate file to size bytes.
    
    File pointer is left unchanged.  Size defaults to the current IO
    position as reported by tell().  Returns the new size.

  感觉语焉不详, 形参为pos, 但说明里说的是size.

  然后又上网搜到一个链接, https://blog.youkuaiyun.com/yandajiangjun/article/details/102307205
  讲得也很浅显, 收藏数量也很高, 当时以为自己看懂了, 还自己总结了一下.

  刚好那时有闲, 就验证了一番, 发现全然不是那么回事, 上面那篇文章中的验证方法和结论中错误很多!
  我的验证过程就不多写了, 有闲的人也可以自己验证一下, 下面只给出我自己得出的结论:

f.truncate(size)
  //返回截取后的尺寸. 总是从头开始, 如果指定尺寸则按尺寸截取; 如果未指定, 则截取到当前位置;
  //调用f.readline()后, 对于f.truncate, 当前位置总在最后的位置(对于r+打开模式); 所以要想准确使用, 最好在rb+模式下

f.seek(0, 2)
  //在文件中找到最后的位置(0代表偏移, 2代表whence中的最后)
  //如果出现io.UnsupportedOperation: can’t do nonzero end-relative seeks 这个错误(指定了负偏移), 主要是因为在python3和python2的问题, 该程序在Python2中是不会报错的, Python3则会报错. 因为Pyhon3在文本文件中, 没有使用b模式选项打开的文件, 只允许从文件头开始计算相对位置, 从文件尾计算时就会引发异常; 在开始使用open打开文件时候, 将打开方式从r, 换成rb即可, 即: f = open(“test.txt”,“rb”) 如果使用seek, 这里必须使用rb

参考文档: https://blog.youkuaiyun.com/weixue9/article/details/112259365

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值