码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-01-17 13:33:08      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:size   不同   原因   let   操作   字节   文件操作   www   系统   

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

我们先来看个例子。

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

 

技术图片

 

 

 

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

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

结果如下

技术图片

 

乱码一大坨。

这里就涉及了字节数了。

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

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

技术图片

 

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

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”

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

技术图片

 

 

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字。

技术图片

 

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

关于字节数可以参考:

https://www.cnblogs.com/King-Tong/p/11431561.html

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

标签:size   不同   原因   let   操作   字节   文件操作   www   系统   

原文地址:https://www.cnblogs.com/King-Tong/p/12205194.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!