python中的f.truncate()函数

  今天要用到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.csdn.net/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.csdn.net/weixue9/article/details/112259365

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值