字符編碼與文件操作2
阿新 • • 發佈:2019-03-31
文件已存在 pri 所有 一行 清空文件 傳輸 文本操作 gbk pass
一、復習
1、編碼
ASCII--->Python--->Unicode
python2:默認ASCII,python:默認utf-8
編碼表:人識別的標識符與計算機識別的標識符形成的對應關系
各編碼表中字符(人能識別)所占字節(將字符轉為二進制的中間產物)數
一個字節=8個二進制位(1個十六進制位=4個二進制位)
ASCII:1~2個字節
Unicode:2個字節
GBK:1~2個字節
UTF-8:Unicode編碼的一種體現方式,1~6個字節
Unicode定長獲取信息快速, UTF-8變長傳輸速度快
2、三種字符串
r’原義 字符串
u’最普通的字符
二進制字符串:用來傳輸的字符串
1.是字符串(文本字符)的二進制體現,(如視頻資源可以轉化為二進制字符串,不翻轉為視頻資源,則就是普通字符串)
2.二進制字符串按字節為最小單位存儲單位存放數據
3.所有數據轉化為二進制字符串都應該用utf-8進行編碼嗎?
----只是文本數據
----視頻、音頻、圖像等此類數據也有編碼解碼過程,采用的編碼表不是utf-8,不用關心編 碼表
字符與ASCII之間轉化
res = ord(‘A‘)
print(res)
res = chr(65)
print(res)# ascii:DBCS雙字節存儲可以存放中文等一些文字與字符,可以完成字符與整數(ascii表中整數)的轉化
print(ord(‘⑩‘), chr(9323))
3、文件基礎讀寫
1.打開文件
r = open(‘a.txt‘, ‘r‘, encoding=‘utf-8‘)
w = open(‘a.txt‘, ‘w‘, encoding=‘utf-8‘)
2.操作
r.read()
w.write(‘msg‘)
3.關閉文件
r.close()
w.close()
二、rw模式結合
w:沒有文件就新建文件,有則清空
w = open(‘1.txt‘, ‘w‘, encoding=‘utf-8‘)w.write(‘000\n‘)
w.flush() 寫一行刷一行
如果文件存在會將寫入文件的內容及時刷從內存刷到硬盤
應用:在寫入大量數據,要及時處理內存空間,不然內存可能溢出導致數據丟失
w.write(‘111\n‘)
w.flush() 最後一次flush()操作可以省略
一次性寫入多行
w.writelines([‘222\n‘, ‘333\n‘])
w.write(‘444‘)
w.newlines
w.write(‘555‘)
w.close()
1.將內存的的數據刷新到硬盤中;2.釋放文件資源
需求:
1.完成文本類型的文件復制:1.txt => 11.txt
r = open(‘1.txt‘, ‘r‘, encoding=‘utf-8‘)
w = open(‘11.txt‘, ‘w‘, encoding=‘utf-8‘)
for line in r: # 遍歷就是一行一行讀 取讀文件的流
w.write(line)
w.flush()
w.close()
r.close()
# 將文件的關閉交給with管理,當with中邏輯結束後,系統會自動釋放文件
with open(‘1.txt‘, ‘r‘, encoding=‘utf-8‘) as r, open(‘source.txt‘, ‘w‘, encoding=‘utf-8‘) as w:
for line in r:
w.write(line)
w.flush()
# w.close() 系統自動完成
# r.close()
三、文件操作模式
r: 讀
w: 寫(無創建,有清空)
a: 追加(有創建的功能)
t: 文本操作(默認模式) r=>rt w=>wt a=>at
b: 非文本文件必須采用二進制模式來處理
+: 可讀可寫
r+: 不會創建文件的可讀可寫 | w+:創建清空文件的可讀可寫 | a+:創建不清空文件(追加)的可讀可寫
x:寫模式創建文件,如果文件已存在就拋出異常
with open(‘1.txt‘, ‘wt‘, encoding=‘utf-8‘) as f:
f.write(‘666‘)
借助讀寫,完成追加
with open(‘1.txt‘, ‘rt‘, encoding=‘utf-8‘) as f1:
data = f1.read()
data += ‘666‘
with open(‘1.txt‘, ‘wt‘, encoding=‘utf-8‘) as f2:
f2.write(data)
a為寫模式,在原數據後追加寫入新數據
with open(‘1.txt‘, ‘a‘, encoding=‘utf-8‘) as f:
f.write(‘777‘)
四、非文本文件復制
with open(‘333.mp4‘, ‘rb‘) as f1:
with open(‘666.mp4‘, ‘wb+‘) as f2:
for line in f1:
f2.write(line)
x:寫模式,創建文件,如果文件以存在,就拋異常
with open(‘000.txt‘, ‘x‘, encoding=‘utf-8‘) as f:
pass
五、文件遊標操作
方法:seek(偏移量, 偏移位置)
偏移量:移動的字節數,負數是結合模式1,2往前偏移
偏移位置:
-- 0 - 從文件開始位置開始偏移 | 1 - 從當前遊標位置開始偏移 | 2 - 從文件末尾開始偏移
b‘你好1234567890‘
遊標讀
with open(‘source.txt‘, ‘rb‘) as f:
d1 = f.read(11)
print(d1)
print(d1.decode(‘utf-8‘))
當前遊標的位置
print(f.tell())
遊標操作 - 從末尾位置開始
f.seek(-3, 2)
d2 = f.read()
print(d2.decode(‘utf-8‘)) # 890
遊標操作 - 從當前位置開始
f.seek(-3, 1)
d2 = f.read()
print(d2.decode(‘utf-8‘)) # 34567890
遊標操作 - 從頭開始
f.seek(3, 0)
d2 = f.read()
print(d2)
print(d2.decode(‘utf-8‘)) # 好1234567890
遊標寫:會覆蓋書寫
with open(‘source.txt‘, ‘rb+‘) as f:
f.seek(11)
print(f.read())
f.write(b‘000‘)
字符編碼與文件操作2