1. 定義
>在內存中存在數據交換的操做認爲是IO操做,好比和終端交互 ,和磁盤交互,和網絡交互等
2. 程序分類
>* IO密集型程序:在程序執行中有大量IO操做,而cpu運算較少。消耗cpu較少,耗時長。
>* 計算密集型程序:程序運行中計算較多,IO操做相對較少。cpu消耗多,執行速度快,幾乎沒有阻塞。
文件python
文件是保存在持久化存儲設備(硬盤、U盤、光盤..)上的一段數據。從功能角度分爲文本文件(打開後會自動解碼爲字符)、二進制文件(視頻、音頻等)。在Python裏把文件視做一種類型的對象,相似以前學習過的其它類型。
字節串(bytes)
在python3中引入了字節串的概念,與str不一樣,字節串以字節序列值表達數據,更方便用來處理二進程數據。所以在python3中字節串是常見的二進制數據展示方式。
* 普通的ascii編碼字符串能夠在前面加b轉換爲字節串,例如:b'hello'
* 字符串轉換爲字節串方法 :str.encode()
* 字節串轉換爲字符串方法 : bytes.decode()
express
文件讀寫網絡
對文件實現讀寫的基本操做步驟爲:打開文件,讀寫文件,關閉文件
ide
1 """ 2 file_open.py 3 文件打開方式訓練 4 """ 5 6 # 打開文件 7 try: 8 # fd = open('a.py','r') # 以只讀打開 9 # fd = open('a.py','w') # 以只寫方式打開 10 # fd = open('a.py','a') # 追加方式 11 12 """ 13 普通的文本文件 14 既可使用文本方式打開也可使用二進制方式打開 15 二進制文件則必須以二進制方式打開 16 """ 17 fd = open('a.py','rb') # 二進制方式 18 print(fd) 19 except Exception as e: 20 print(e) 21 22 # 讀寫文件 23 24 # 關閉文件 25 fd.close()
1 """ 2 file_read.py 3 文件讀取演示 4 """ 5 6 # 打開文件 7 f = open('test','r') 8 9 # read 循環讀取 10 # while True: 11 # # 讀到文件結尾返回空字符串 12 # data = f.read(1024) #每次最多讀100字符 13 # # 讀到結尾跳出循環 14 # if not data: 15 # break 16 # print(data) 17 18 # 讀取一行內容 19 # data = f.readline(10) # 讀取前10個字符 20 # print("一行內容:",data) 21 # data = f.readline() # 讀完第一行剩餘內容 22 # print("一行內容:",data) 23 24 # 將內容讀取爲列表,每行爲列表一個元素 25 # data = f.readlines(18) #前18個字符所在的行做爲讀取對象 26 # print(data) 27 28 # f爲可迭代對象 29 for i in f: 30 print(i) # 每次迭代到一行內容 31 32 # 關閉 33 f.close()
1 """ 2 file_write.py 3 文件寫操做演示 4 """ 5 6 # 打開文件 7 # f = open('test','w') 8 # f = open('img.jpg','wb') 9 f = open('test','a') # 追加 10 11 # 寫操做 12 # f.write("hello 死鬼\n".encode()) 13 # f.write("哎呀,幹啥".encode()) 14 15 # 將列表寫入 人爲添加換行 16 l = ['hello world\n','哈哈哈'] 17 f.writelines(l) 18 19 f.close()
1. 打開文件
```python
file_object = open(file_name, access_mode='r', buffering=-1)
功能:打開一個文件,返回一個文件對象。
參數:file_name 文件名;
access_mode 打開文件的方式,若是不寫默認爲‘r’
文件模式 操做
r 以讀方式打開 文件必須存在
w 以寫方式打開
文件不存在則建立,存在清空原有內容
a 以追加模式打開
r+ 以讀寫模式打開 文件必須存在
w+ 以讀寫模式打開文件
不存在則建立,存在清空原有內容
a+ 以讀寫模式打開 追加模式
rb 以二進制讀模式打開 同r
wb 以二進制寫模式打開 同w
ab 以二進制追加模式打開 同a
rb+ 以二進制讀寫模式打開 同r+
wb+ 以二進制讀寫模式打開 同w+
ab+ 以二進制讀寫模式打開 同a+
buffering 1表示有行緩衝,默認則表示使用系統默認提供的緩衝機制。
返回值:成功返回文件操做對象。
```
>緩衝:系統自動的在內存中爲每個正在使用的文件開闢一個緩衝區,從內存向磁盤輸出數據必須先送到內存緩衝區,再由緩衝區送到磁盤中去。從磁盤中讀數據,則一次從磁盤文件將一批數據讀入到內存緩衝區中,而後再從緩衝區將數據送到程序的數據區。
2. 讀取文件
>read([size])
>功能: 用來直接讀取文件中字符。
>參數: 若是沒有給定size參數(默認值爲-1)或者size值爲負,文件將被讀取直至末尾,給定size最多讀取給定數目個字符(字節)。
>返回值: 返回讀取到的內容
>* 注意:文件過大時候不建議直接讀取到文件結尾,讀到文件結尾會返回空字符串。
>readline([size])
>功能: 用來讀取文件中一行
>參數: 若是沒有給定size參數(默認值爲-1)或者size值爲負,表示讀取一行,給定size表示最多讀取制定的字符(字節)。
>返回值: 返回讀取到的內容
>readlines([sizeint])
>功能: 讀取文件中的每一行做爲列表中的一項
>參數: 若是沒有給定size參數(默認值爲-1)或者size值爲負,文件將被讀取直至末尾,給定size表示讀取到size字符所在行爲止。
>返回值: 返回讀取到的內容列表
>文件對象自己也是一個可迭代對象,在for循環中能夠迭代文件的每一行。
```python
for line in f:
print(line)
```
3. 寫入文件
>write(string)
>功能: 把文本數據或二進制數據塊的字符串寫入到文件中去
>參數:要寫入的內容
>* 若是須要換行要本身在寫入內容中添加\n
>writelines(str_list)
>功能:接受一個字符串列表做爲參數,將它們寫入文件。
>參數: 要寫入的內容列表
4. 關閉文件
打開一個文件後咱們就能夠經過文件對象對文件進行操做了,當操做結束後使用close()關閉這個對象能夠防止一些誤操做,也能夠節省資源。
>file_object.close()
5. with操做
python中的with語句使用於對資源進行訪問的場合,保證無論處理過程當中是否發生錯誤或者異常都會執行規定的「清理」操做,釋放被訪問的資源,好比有文件讀寫後自動關閉、線程中鎖的自動獲取和釋放等。
with語句的語法格式以下:
```python
with context_expression [as target(s)]:
with-body
```
經過with方法能夠不用close(),由於with生成的對象在語句塊結束後會自動處理,因此也就不須要close了,可是這個文件對象只能在with語句塊內使用。
```python
with open('file','r+') as f:
f.read()
```
>注意
>> 1. 加b的打開方式讀寫要求必須都是字節串
>> 2. 不管什麼緩衝,當程序結束或者文件被關閉時都會將緩衝區內容寫入磁盤函數
flush()學習
該函數調用後會進行一次磁盤交互,將緩衝區中的內容寫入到磁盤。編碼
打開一個文件進行操做時系統會自動生成一個記錄,記錄中描述了咱們對文件的一系列操做。其中包括每次操做到的文件位置。文件的讀寫操做都是從這個位置開始進行的。spa
tell()
功能:獲取文件偏移量大小線程
seek(offset[,whence])
功能:移動文件偏移量位置
參數:offset 表明相對於某個位置移動的字節數。負數表示向前移動,正數表示向後移動。
whence是基準位置的默認值爲 0,表明從文件開頭算起,1表明從當前位置算起,2 表明從文件末尾算起。code
- 必須以二進制方式打開文件時基準位置才能是1或者2
系統中每個IO操做都會分配一個整數做爲編號,該整數即這個IO操做的文件描述符。
fileno()
經過IO對象獲取對應的文件描述符
os.path.getsize(file)
os.listdir(dir)
os.path.exists(file)
os.path.isfile(file)
os.remove(file)