python获取文件字节数_python关于文件操作中的字符个数和字节数

记得刚开始学习python文件操作写文件的时候有个问题,很奇怪。最后知道了就是字节数的原因。

我们先来看个例子。

新建个文件存为utf-8命名为0117utf-8.txt记得去掉BOM头。

1780068-20200117114222633-1873281603.png

我们用r+模式尝试去修改

>>> fp=open("d:\\pydelete\\0117utf-8.txt","r+")

>>> fp.write("aa")

2

>>> fp.close()

>>>

结果如下

1780068-20200117114634944-130647592.png

乱码一大坨。

这里就涉及了字节数了。

因为utf-8存中文是用3个字节存一个,存英文是用1个字节存一个英文字符。

如果写入“aaa”就可以了。

1780068-20200117115018175-797764133.png

所以切入正题,看看字节数和字符个数。

1.fp.read(arg),fp.write()后返回的数字是字符个数。

我们用刚才写过的文件读一下看看。

>>> fp=open("d:\\pydelete\\0117utf-8.txt","r+",encoding="utf-8")

>>> fp.read(1)

'a'

>>> fp.read(1)

'a'

>>> fp.read(1)

'a'

>>> fp.read(1) #可以看到这里的数字应该是字符个数,意思一个字符。

'国'

>>> fp.read(1)

'话'

>>> fp.read(1)

''

>>>

我们再来写入一些内容。

>>> fp.seek(0.0) #将游标切回行首

0.0

>>> fp.write("新写入2x")

5 #可以看到这里也是字符个数。表示写入5个字符。

>>>fp.flush()

我们算一个结果之前文件内容是“aaa国话”我们写入“新写入2x” 之前的文件字节数是9,现在写入11 r+模式会从头开始覆盖所以现在文件内容为“新写入2x”

如果写入的字节数小于之前的有可能出现乱码(如果原文件有中文存在)

1780068-20200117120326938-1065756523.png

2.fp.tell(),fp.seek(0,0) 是字节数

我们加游标切回行首,再来读下。

>>> fp.seek(0,0)

0

>>> fp.read(1)

'新'

>>> fp.tell()

3 #可以看出tell是返回的字节数,也就是游标现在应该在新字后边。

>>>

由此我们试着改变游标位置。

>>> fp.seek(0,0)

0

>>> fp.seek(6,0) #seek的第一个参数也是字节数,那现在游标在哪我如果读一个字符应该是什么? 游标应该在写字后如果读一个字符应该是“入”

6

----------

>>> fp.read(1)

'入'

3.fp.truncate(size)

把文件裁成规定的大小,默认是裁到当前文件操作标记的位置。如果size 比文件的大小还要,依据系统的不同可能是不改变文件,

也能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。参数也是字节数。

我们来尝试一下

>>> fp.seek(0,0)

0

>>> fp.truncate(6)

6

>>>

此时文件内容应该只剩下“新写”2字。

1780068-20200117122312146-1960899329.png

知道这些我们在写文件的时候,就能很清楚效果了。

关于字节数可以参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值