1. 程式人生 > >字符編碼與文件處理

字符編碼與文件處理

pytho 了解 Coding rep utf-8 move 追加內容 lac 圖片

字符編碼

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\n‘) #寫入第一行
f.writelines([‘2222\n‘,‘3333\n‘,‘4444\n‘]) #添加多行
print(f.writable()) #可寫
f.close()
追加:
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方式打開時,讀取到的內容是字節類型,寫入時也需要提供字節類型,不能指定編碼



字符編碼與文件處理