字符编码和文件处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符编码和文件处理相关的知识,希望对你有一定的参考价值。

字符编码:                                                     

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

文件处理:                                                   

文件处理流程↓

打开文件----->得到文件的句柄并赋值给一个变量---->通过句柄对文件进行操作--->关闭文件

读文件(read):

f=open(r‘aaaa.py‘,‘r‘,encoding=‘utf-8‘)
print(f.readline(),end=‘‘)      #读取一行,
print(f.readlines())       #读取全部,不换行
print(f.readable())       #可读文件
print(f.writable())       #不可写文件
f.close()       #结束之后必须关闭,否则占用内存

写文件(write):

f=open(‘new.txt‘,‘w‘,encoding=‘utf-8‘)
f.write(‘1111111111\n‘)      #写入第一行
f.writelines([‘2222\n‘,‘3333\n‘,‘4444\n‘])      #添加多行
print(f.writable())       #可写

追加:

f=open(‘new_2‘,‘a‘,encoding=‘utf-8‘)
print(f.readable())         #不可读
print(f.writable())         #可写
f.write(‘888888\n‘)       #追加单行
f.write(‘999999\n‘)
f.writelines([‘787878\n‘,‘878787\n‘])       #追加多行
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\n‘.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方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

以上是关于字符编码和文件处理的主要内容,如果未能解决你的问题,请参考以下文章

字符编码和文件处理

字符编码文件处理

python 基础之字符编码和文件处理

day10 字符编码和文件处理

day 10 字符编码和文件处理 细节整理

字符编码和文件处理