• 字符编码的与文件处理的补充内容


    字符编码:

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

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

    其中

    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模式下操作路径时要写绝对路径去寻找文件,以及新建文件。
    
    
    
     



  • 相关阅读:
    topcoder srm 445 div1
    topcoder srm 440 div1
    topcoder srm 435 div1
    topcoder srm 430 div1
    topcoder srm 400 div1
    topcoder srm 380 div1
    topcoder srm 370 div1
    topcoder srm 425 div1
    WKWebView强大的新特性
    Runtime那些事
  • 原文地址:https://www.cnblogs.com/lx3822/p/8632077.html
Copyright © 2020-2023  润新知