zoukankan      html  css  js  c++  java
  • python关于文件操作中的字符个数和字节数

    记得刚开始学习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

  • 相关阅读:
    Oracle中有大量的sniped会话
    Error 1130: Host '127.0.0.1' is not allowed to connect to this MySQL server
    汉字转换为拼音以及缩写(javascript)
    高效率随机删除数据(不重复)
    vs2010 舒服背景 优雅字体 配置
    mvc中的ViewData用到webfrom中去
    jquery ajax return值 没有返回 的解决方法
    zShowBox (图片放大展示jquery版 兼容性好)
    动感效果的TAB选项卡 jquery 插件
    loading 加载提示······
  • 原文地址:https://www.cnblogs.com/King-Tong/p/12205194.html
Copyright © 2011-2022 走看看