zoukankan      html  css  js  c++  java
  • 字符编码的与文件处理的补充内容

    字符编码:

    人类的字符  经过翻译 转换 成数字

    翻译的过程遵循的标准即字符编码(就是一个字符与数字一一对应的关系表)

    其中

    ascii :       英文 1bytes

    gbk:           中文 2bytes  英文:1bytes

    unicode:     任意字符    :2bytes

    utf-8:           中文:3bytes   英文1bytes

    需要掌握的就是

    1、以书面编码存的,就应该以该编码取文件头   #coding:utf-8:用于python解释器读取python文件。所以文件头指定的编码必须跟python文件存储时用的编码一致。

    2、编码解码

    unicode------编码encode(对下)---->> utf-8

    utf-8 ---------解码decode(对上)---->> unicode

    python3中str(字符串)是以unicode编码形式存放的

    x='你好’

    x.encode('utf-8')----->>  bytes    #由字符串(Unicode编码)转换(编码)成 字节“utf-8 字符编码”

    bytes.decode('utf-8')--->>str(unicode)   # 由字节 (utf-8)转换(解码)成字符串 Unicode(编码)

    3、bytes 类型的用途:

    1、存放道文件中(bytes是二进制语言,也就是机器语言,存取方便)

    2、基于网络传播,道理同上, 传播也需要二进制语言。

    二 文件处理

    文件打开的 t 模式

    打开文件的三个步骤:

    1:f=open(r'c:acd.txt',mode='r',encoding='utf-8')

    2.f.read()       根据要求参加操作文件

    3.f.close()      关闭文件

    打开多个文件的操作

    with open('a.txt',encoding='utf-8') as f1,

        open('b.txt',encoding='utf-8') as f2,

        open('c.txt',encoding='utf-8') as f3:

    "”表示不换行的意思, 虽然文件中打印了3行, 但是实际还是在一行的意思。

    文件的打开模式:默认是t模式,t不能单独使用,必须是rt,wt,at

    r:只读模式

    w:只写模式

    a:只追加写模式

    操作方法

    f.read()      只读,读出所有的该文件内容,光标移动到文件末尾,当成一个大的字符串

    f.readline()   读一行内容, 光标移动到第二行首部  

    f.readines()  读取每一行内容, 存放于列表中

    循环读取每一行

    f=open('a.txt',mode='r',encoding='utf-8')
    for line in f:
        print(line,end=''了解:
    f.readable()  #文件是否可读的
    f.writable() #文件是都可写的
    f.closed #文件是否关闭
    f.encoding #如果文件打开模式为b.则没有该属性
    f.flush() #立刻将文件内容从内存刷到硬盘


    文件打开的 b 模式
    强调
    1、 与t模式类似 不能单独使用,必须是rb,wb,ab
    2、 b模式下读写都是以bytes单位的
    3、 b模式下一定不能指定encoding 参数

    rb模式 只读
    with open('11.png',mode='rb') as f:
        data=f.read()
        print(data)       date的字符编码bytes模式
    
    #打印结果b'x89PNG
    x1a
    x00x00x00
    IHDRx00x00x02Zx00x00x01x9bx08x06x00x00x00x1cx07>fx00x00x00x01sRGBx00xaexcex1cxe9x00x00x00x04gAMAx00x00xb1x8fx0bxfcax05x00x00x00	pHYsx00x00x16%x00x00x16%x01IR$xf0x00x00x8ex04IDATx^xedxbdx89x9b$xdbYx9f9xffxc3xxd8x07lKx80x8d=x98xd1c

    wb  模式 只写模式

    with open('b.txt',mode='wb') as f:
        a= '月月,你去哪'
        f.write(a.encode('utf-8'))  # 原文件清空, 覆盖, 只有一个新文件里面的内容 月月你去哪

    ab 模式  只追加可写模式

    with open('b1.txt',mode='ab',)as f:
        f.write('你好'.encode('utf-8'))

    3.了解部分

    '+’表示同事读写某个文件

    r+  读写[可读,可写]

    w+ 写读[可读,可写]

    a+ 写读[可读 ,可写]

    三、文件的修改方式

    第一种方式:

    1:先把文件内容全部读入内存
    2:然后在内存中完成修改
    3:在把修改后的结果覆盖写入原文件
    缺点:会在文件内容过大的情况下,占用过多的内存。
    例如:
    要把 b.txt 文件里
    11111, 222223333      只更改第一行改成                      11111{00000}, 222223333
    44444,55555,6666644444,55555,666667777,888899999                                                 7777,888899999
    
    
    
    with open('b.txt',mode='r',encoding='utf-8')as f:
        data =f.read()
        data=data.replace('11111','11111{00000}')
    with open('b.txt',mode='w',encoding='utf-8') as f:
        f.write(data)
    
    

    第二种方式
    以读的方式打开原文件, 以写的方式打开一个新文件,,然后通过for循环 把需要更改的那一行更改掉, 然后把原文件删掉, 把新文件命名为原文件名
    imports os

    import os
    with open('b.txt',mode='r',encoding='utf-8') as f,
            open('c.txt',mode='w',encoding='utf-8')as f1:
        for line in f:
            if '11111'in line:
                line=line.replace('11111', '11111{00000}')
            f1.write(line)
    os.remove('b.txt')
    os.rename('c.txt','b.txt')

    copy 文件的操作方式:
    将A文件的内容拷贝到B文件中,imports sys .
    import sys
    source_file=sys.argv[1]
    dst_file=sys.argv[2]
    with open(r'%s' %source_file,mode='rb') as read_f,open(r'%s' %dst_file,mode='wb') as write_f:
        for i in read_f:
            write_f.write(i)


    在cmd模式下操作路径时要写绝对路径去寻找文件,以及新建文件。
    
    
    
     



  • 相关阅读:
    WPF之长短
    MFC程序和Win32程序的关系
    .NET Framework/CLR之长短
    常用软件
    经典推荐.Net面试法宝
    socket编程原理
    常用开发工具
    Get和Post方法的区别
    MAC IP等相关
    Datagrid为什么不自动换行显
  • 原文地址:https://www.cnblogs.com/lx3822/p/8632077.html
Copyright © 2011-2022 走看看