IO,文件

IO      

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()
open.py
 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()
read.py
 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()
write.py

 
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()學習

該函數調用後會進行一次磁盤交互,將緩衝區中的內容寫入到磁盤。編碼

 

文件偏移量

  1. 定義

打開一個文件進行操做時系統會自動生成一個記錄,記錄中描述了咱們對文件的一系列操做。其中包括每次操做到的文件位置。文件的讀寫操做都是從這個位置開始進行的。spa

  1. 基本操做

tell()
功能:獲取文件偏移量大小線程

seek(offset[,whence])
功能:移動文件偏移量位置
參數:offset 表明相對於某個位置移動的字節數。負數表示向前移動,正數表示向後移動。
whence是基準位置的默認值爲 0,表明從文件開頭算起,1表明從當前位置算起,2 表明從文件末尾算起。code

  • 必須以二進制方式打開文件時基準位置才能是1或者2

文件描述符

  1. 定義

系統中每個IO操做都會分配一個整數做爲編號,該整數即這個IO操做的文件描述符。

  1. 獲取文件描述符

    fileno()
    經過IO對象獲取對應的文件描述符

 

文件管理函數

  1. 獲取文件大小

os.path.getsize(file)

  1. 查看文件列表

os.listdir(dir)

  1. 查看文件是否存在

os.path.exists(file)

  1. 判斷文件類型

os.path.isfile(file)

  1. 刪除文件

os.remove(file)

相關文章
相關標籤/搜索