zoukankan      html  css  js  c++  java
  • 字符编码与文件处理

    字符编码

    1 以什么编码存的就要以什么编码取出
    ps:内存固定使用unicode编码,
    我们可以控制的编码是往硬盘存放或者基于网络传输选择编码
    
    2 数据是最先产生于内存中,是unicode格式,要想传输需要转成bytes格式
    #unicode----->encode(utf-8)------>bytes
    拿到bytes,就可以往文件内存放或者基于网络传输
    #bytes------>decode(gbk)------->unicode
    
    3 python3中字符串被识别成unicode
    python3中的字符串encode得到bytes
    
    4 了解
    python2中的字符串就bytes
    python2中在字符串前加u,就是unicode

    文件处理

    文件处理流程
    
    打开文件,得到文件句柄并赋值给一个变量------->通过句柄对文件进行操作------->关闭文件
    
    读文件:
    
    f=open(r'aaaa.py','r',encoding='utf-8')
    print(f.readline(),end='')      #读取一行,
    print(f.readlines())       #读取全部,不换行
    print(f.readable())       #可读文件
    print(f.writable())       #不可写文件
    f.close()       #结束之后必须关闭,否则占用内存
    写文件:
    f=open('new.txt','w',encoding='utf-8')
    f.write('1111111111
    ')      #写入第一行
    f.writelines(['2222
    ','3333
    ','4444
    '])      #添加多行
    print(f.writable())       #可写
    f.close()
    追加:
    f=open('new_2','a',encoding='utf-8')
    print(f.readable())         #不可读
    print(f.writable())         #可写
    f.write('888888
    ')       #追加单行
    f.write('999999
    ')
    f.writelines(['787878
    ','878787
    '])       #追加多行
    f.close()
    #rb
    f=open('aaaa.py','rb')    #以字节打开
    print(f.read().decode('utf-8'))
    拷贝图片
    f=open('1.jpg','rb')      #以rb的方式打开1.JPG
    data=f.read()           #data获取读取到f的内容
    print(data)
    f2=open('3.jpg','wb')      #以写的方式打开
    f2.write(data)         #把data的内容写到f2
    f2.close()
    f.close()
    #ab,以二进制的形式追加
    f=open('new_3.txt','ab')
    f.write('aaaaa
    '.encode('utf-8'))
    上下文管理
    with open('aaaa.py','r',encoding='utf-8') as read_f,
            open('aaaa_new.py','w',encoding='utf-8') as write_f:
        data=read_f.read()
        write_f.write(data)
    循环取文件每一行内容
    with open('a.txt','r',encoding='utf-8') as f:
        while True:
            line=f.readline()
            if not line:break
            print(line,end='')
    
        lines=f.readlines() #只适用于小文件
        print(lines)
    
        data=f.read()
        print(type(data))
    
    
        for line in f: #推荐使用
            print(line,end='')
    文件的修改
    方式一:只适用于小文件
    import os
    with open('a.txt','r',encoding='utf-8') as read_f,
            open('a.txt.swap','w',encoding='utf-8') as write_f:
        data=read_f.read()
        write_f.write(data.replace('alex_SB','alex_BSB'))
    
    os.remove('a.txt')
    os.rename('a.txt.swap','a.txt')
    #方式二:
    import os
    with open('a.txt','r',encoding='utf-8') as read_f,
            open('a.txt.swap','w',encoding='utf-8') as write_f:
        for line in read_f:
            write_f.write(line.replace('alex_BSB','BB_alex_SB'))
    
    os.remove('a.txt')
    os.rename('a.txt.swap','a.txt')

    打开文件的模式有:

    r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    w,只写模式【不可读;不存在则创建;存在则清空内容】
    x, 只写模式【不可读;不存在则创建,存在则报错】
    a, 追加模式【可读;   不存在则创建;存在则只追加内容】
    "+" 表示可以同时读写某个文件
    
    r+, 读写【可读,可写】
    w+,写读【可读,可写】
    x+ ,写读【可读,可写】
    a+, 写读【可读,可写】
     "b"表示以字节的方式操作
    
    rb  或 r+b
    wb 或 w+b
    xb 或 w+b
    ab 或 a+b
    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
    
    
    
  • 相关阅读:
    《SmartJs系列》屌丝逆袭,华丽转身,解读自定义ScrollBar(一)
    IE6/IE7下,li设置float后,行高变高问题__UL的padding-top Bug
    团队作业
    团队作业
    结对作业
    个人作业
    心得
    css3的自定义字体
    javascript中的call方法
    javascript对象访问
  • 原文地址:https://www.cnblogs.com/52-qq/p/7230712.html
Copyright © 2011-2022 走看看