io流
1、什麼是io流?
i(input) o(output)stream
主要說的就是將資料讀入記憶體或者記憶體輸出的過程中使用的技術
常見的io流操作,一般說的是【記憶體】與【磁碟】之間的輸入輸出。
2、作用
持久化資料,保證資料不再丟失!
3、io的分類
一、根據資料流動方向(粘在記憶體的角度來說)
r——輸入流
w——輸出流
二、根據資料的型別
b——位元組流
t——字元流
4、python如何操作io流
全域性函式 open 開啟乙個io操作
open函式主要的目的是開啟乙個本地的檔案
open函式的使用中,需要了解以下幾個引數:
open(file, mode=『r』, buffering=-1, encoding=none, errors=none, newline=none, closefd=true, opener=none)
【file】:表示乙個檔案的具體路徑,或者要開啟的檔名稱
【mode】 : mode 決定了開啟檔案的模式:唯讀,寫入,追加等。所有可取值見如下的完全列表。這個引數是非強制的,預設檔案訪問模式為唯讀®。
【buffering】 : 如果 buffering 的值被設為 0,就不會有寄存。如果 buffering 的值取 1,訪問檔案時會寄存行。如果將 buffering 的值設為大於 1 的整數,表明了這就是的寄存區的緩衝大小。如果取負值,寄存區的緩衝大小則為系統預設。
【encoding】: 一般使用utf8
mode中:
"r"——read表示輸入流
"w"——write表示輸出流
「t"——表示字元流 #使用字元操作io流
"b"——表示位元組流 #使用位元組操作io流 (位元組流操作大資料的,不建議一次性讀取)
"a"——表示追加輸出
io流的使用
>>>f = open(path,"r") #path是路徑
>>>msg = f.read()
>>>f.close() #最後關閉io流,一定要關閉!
5.io讀寫檔案的步驟:
(1) io讀取檔案
io讀取檔案的步驟:
建立待讀取的檔案(讀取檔案,檔案必須是存在的)
開啟檔案
讀取檔案
輸出讀取的內容
關閉資源
(2) io寫入檔案
io寫入檔案的步驟:
建立待寫入的檔案(檔案不一定存在)
獲取檔案的父級目錄
判斷父級目錄是否存在
父級目錄不存在,要建立父級目錄
開啟檔案
建立寫入的內容
寫入內容
關閉資源
舉個例子:
寫入:>>> a="python的io流操作這麼神奇"
>>> f=open("e://python學習.txt","w")
>>> f.write(a)
>>> f.close()
讀出:>>> f=open(r"e://python學習.txt","r")
>>> print(f.read())
python的io流操作這麼神奇
>>> f.close()
更多:>>>f = open(file,"r") #f物件就是python io物件
方法:>>>read(size=-1) #讀取
>>>readline() #讀取一行資料
>>>readlines() #讀取多行資料
>>>write(data) #寫入到檔案
>>>writelines() #將多個資料寫入
>>>flush #重新整理快取區
>>>encodind() #編碼
>>>colse()#關閉file物件,注意close自動的呼叫flush進行最後檔案的重新整理
>>>closed() #判斷流是否關閉
注意:io流如果不使用的話一定要關閉!不關閉的話會造成資源的占用。
拷貝資料時,為了避免因為目標過大而導致宕機,應使用read引數來控制每次拷貝資料的多少,也可以用迴圈來做。
def copyfile(src, dest):
"""檔案的拷貝"""
src_file = open(src, "br")
dest_file = open(dest, "bw")
# 當檔案時,如果檔案是位元組檔案,要注意大檔案的拷貝
# 如果是大檔案,一定不要直接拷貝,防止記憶體溢位
while true:
content = src_file.read(1024) #讀取檔案中1024位元組
if content == b'': #對判斷是否讀完
print("檔案讀取完成")
break
else:
dest_file.write(content) #將讀出的內容寫入另乙個檔案
src_file.close()
dest_file.close()
if __name__ == '__main__':
src = input("請輸入您要拷貝的檔案路徑:")
dest = input("請輸入你要儲存的新路徑:")
copyfile(src, dest)
物件序列化
1.什麼是物件序列化?
將記憶體的乙個抽象概念/邏輯概念(物件)轉換成位元組或者字元資料的過程。
2.這裡介紹兩個用法——pickle、json
1、pickle模組(二進位制和物件之間的序列化)
1、dump——將物件序列化稱為位元組(二進位制)資料,並且儲存到file中
2、dumps——將資料序列化成為位元組資料
3、load——將乙個file物件反序列化
4、loads——將乙個位元組資料反序列化為物件
2、json模組(字串和物件之間的序列化)
1、dump——將物件序列化稱為字元資料,並且儲存到file中
2、dumps——將資料序列化成為字元資料
3、load——將乙個file物件反序列化
4、loads——將乙個字元資料反序列化為物件
pickle和json的用法是一樣的,要注意的是json這個模組一般用來序列化字典物件,或者轉換json資料,但是其它物件也是可以的。
with語句塊
python 每當開啟乙個io,最後一定要關閉資源
with open("a.txt", "r") as f:
# 操作io流,不用關閉
with語句塊開啟的io
with結束時自動呼叫close方法關閉資源
Python io流的讀寫操作
自擬需求 將一段對話解析出來,並規範命名格式為 人名 序號 如下 在完善這個功能之前遇到兩個錯誤 1.unicodedecodeerror gbk codec can t decode byte 0xab in position 8 illegal multibyte sequence 這個是由於檔...
python IO程式設計
io程式設計 檔案讀寫 f open text.txt r 標示符 r 表示讀 str f.read print str f.close 如果檔案不存在,open 函式就會丟擲乙個ioerror的錯誤,並且給出錯誤碼和詳細的資訊告訴你檔案不存在。最後一步是呼叫close 方法關閉檔案。檔案使用完畢後...
Python IO程式設計
io在計算機中指input output,也就是輸入和輸出。由於程式和執行時資料是在記憶體中駐留,由cpu這個超快的計算核心來執行,涉及到資料交換的地方,通常是磁碟 網路等,就需要io介面。只要進行資料交換,網路傳輸等行為都會產生io操作。同步io cpu等著,也就是程式暫停執行後續 等100m的資...