zoukankan      html  css  js  c++  java
  • Python中编码的进阶、文件操作

    编码的进阶

           ASCII:英文字母,数字,特殊符号,——>  二进制的对应关系

                  Str:

                         1个字符——> 1个字节

           Unicode:万国码:世界上所有的文字与二进制的对应关系

                         1个字符——> 4个字节

           Utf-8:至少用8位1个字节表示一个字符。

                         英文:一个字节

                         中文:三个字节

           Gbk:国标

                         英文:一个字节

                         中文:两个字节

           以上总结:

                     i.          不同的编码之间的0101010是不能互相识别的,除ASCII外。

                    ii.          网络传输,数据存储到磁盘你用的0101010这种二进制,不能使用unicode的编码本去编译。

    大背景:python3x版本。

    Str:它在内存中的编码方式:unicode

    写入文件的内容、传输给别人的数据,一般都是str的形式。所以此处有矛盾点:网络传输,数据存储到磁盘你用的0101010这种二进制,不能使用unicode的编码本去编译。但python3x又需要str形式去操作。对此用以下方法:

           利用str发送或传输

           (转换,将Unicode编码转化成非Unicode)——>发送、传输

    Int

    Bool

    Str

    Bytes:与str几乎一模一样。

    List

    Dict

    Set

    Tuple

    Str与bytes的区别:

           英文:

           Str在内存中的编码:Unicode

                  表现形式:‘taibai’

           Bytes在内存中的编码:非Unicode

                  表现形式b”taibai”

    中文:

           Str在内存中的编码:非Unicode

                  表现形式:’中国’

           Bytes在内存中的编码:非Unicode

                  表现形式:b’axcc…..

    #终极转换:

           Str->str.decode(‘utf-8’)->传输过程->str.encode(‘gbk’)

    Decode:编码   encode:解码

    文件操作的初识

    f=open(‘文件路径’,encoding=’编码方式’,mode=’r’)

    print(f.read())

    f.close()

    出现问题:

    1. 路径问题:

    r”D:新建文本文档”, encoding=’编码方式’,mode=’r’

    ”D:\0新建文本文档”, encoding=’编码方式’,mode=’r’

    1. 编码的问题:

    编码要与文件存储时的编码保持一致

    1. 可能隐藏了后缀名

    文件的读:

           四种模式:

           r r+ rb r+b ….  r模式下n代表字符 , r模式下n代表字节

           每种模式下有5种读取模式

    1. print(f.read()): 全部读取
    2. print(f.read(n)):按字符读。
    3. print(f.readline()):按行读。
    4. print(f.readlines()):返回一个list 列表的每个元素是源文件的每一行。
    5. 循环读取:

           for line in f:

                  print(line)

           r:直接读取

    rb:以字节的形式读取。 带b的一般操作的都是非文字类的文件。

    文件的写:

           r+:读写模式-先读后写。

           w w+ wb w+b

           w:没有文件则创建文件并写入内容。如果有文件,先清空原先内容,再写入。  f.write(‘alex’)

           wb:先用rb读取别的文件内容,然后把内容赋值给一个变量,最后再把这个变量写入别的文件。

    文件的追加

           a ab a+ a+b

           a:没有文件,创建文件,写入内容。如有文件,就在原文件内容后面追加内容。

           a+:追加并读

    其他操作

           f.flush()   强制保存

           readable writeable        判断是否可读可写

                  print(f.readable())

                  print(f.writeable())

           seek tell  调整光标的位置(按字节调整)/获取指针位置

           truncate  对原文件进行(按字节从头)截取,必须在可写情况下使用。(seek对truncate不管用)

           最常用的方法:read seek tell flush readable writeable

    打开文件的第二种方式(省去了写f.close()):

           with open(‘文件路径文件名’,encoding=’utf-8’) as f1:

                  print(f1.read())

           优点:1.省去了写f.close();2.一个with语句可以操作多个文件句柄。

           with open(‘文件路径文件名’,encoding=’utf-8’) as f1,open(‘文件路径文件名’,encoding=’utf-8’) as f2:

           缺点:有时候关闭文件和硬件有关

    文件的改:

    1. 以读的模式打开源文件。
    2. 以写的模式创建一个新文件。
    3. 将原文件内容读取出来,按照你的要求更改成新内容,写入新文件。
    4. 删除原文件。
    5. 将新文件重命名成原文件。

    low版改名:

     

  • 相关阅读:
    Xen, Linux and udev
    xend的调试方法
    xenstored为什么不能重启?
    [转]xen虚拟windows使用vnc桌面鼠标位置偏移现象的解决
    基于模板的代码生成器
    区分JavaScript中的undefined,null和NaN
    ExtJS+ASP.NET实现异步Tree的节点搜索和查找下一个(FindNext)
    ExtJS+ASP.NET实现Tree节点的拖动(DragDrop)
    ExtJS+ASP.NET实现真实的进度条显示服务器端长时间操作的进度
    说说企业架构(企业级架构)和应用程序架构
  • 原文地址:https://www.cnblogs.com/1oo88/p/10500169.html
Copyright © 2011-2022 走看看