字符編碼和文件處理

字符編碼:                                                     

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方式打開時,讀取到的內容是字節類型,寫入時也需要提供字節類型,不能指定編碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章