1. 程式人生 > >Python文件和目錄操作

Python文件和目錄操作

targe 了解 utf-8 linux trunc close 操作 table ont

本章內容

  1. open
  2. 內置函數
  3. with語句

一、open

  open函數是我們在文件操作中經常用到的一個python內置函數

1 f = open(file.txt,encoding="utf-8")
2 data = f.read()
3 print(data)
4 f.close()

  PS:最後一定要調用close()來把打開的文件關閉

  我們通過源碼來看看有哪些參數

open(file, mode=‘r‘, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

  上述引用中,我們只需要註意file、mode、encoding就可以了,因為這三個是我們常用的也是必用的,對於其他的參數我並不了解,因為一般沒用過。

  file:文件名;mode:打開文件的模式;encoding:編碼方式

  打開文件的模式有:

  r,只讀模式(PS:只可寫讀不可寫

  w,只寫模式(PS:只可寫不可讀,該模式如果文件存在就清空裏面所有內容,如果不存在就會自動創建

  a,追加模式(PS:只可寫,並且寫只能追加到最後,文件如果不存在參考 ‘ w ‘ 模式)

  +,可同時讀寫

    r+,可讀寫文件(PS:可讀,可寫,可追加,如果文件不存在就報錯)

    w+,可讀寫文件(PS:相當於為 w 模式加上了讀的功能,)

    a+,同 a

  b,表示以二進制的模式進行處理(PS:Linux可忽略,Windows處理二進制文件時需標註)

    rb,同r(PS:因為是以二進制的方式,所以encoding參數就不能用了,用了會報錯)

    wb,同w(PS:Windows下寫的時候需要標註,第一種就是直接在字符串前加b,第二種就是用bytes將數據轉換成bytes類型。)

    ab,同a(PS:需要標註)

  U,表示在讀取時,可以將\r \n \r\n 自動轉換成 \n (與r或r+模式同時使用)

    在python3.x中這個方法已經廢棄了,所以不說了。

二、open中的內置函數

 1 #with open(‘file.txt‘,‘r+‘,encoding="utf-8") as f:
 2 
 3 f.close()    #關閉文件
 4 
 5 f.fileno()    #返回一個文件描述符
 6 
 7 f.isatty()    #如果文件連接(與終端設備相關聯)到tty(類似)設備,就返回True,否則False
 8 
 9 f.read()      #用於讀取文件內容,但是此方法不一定能完全讀出來。官方文檔如下:
10 """
11 Only makes one system call, so less data may be returned than requested.
12 In non-blocking mode, returns None if no data is available.
13 Return an empty bytes object at EOF.
14 """
15 
16 #大致意思就是說該方法只進行一個系統調用,因此可以返回的數據比請求的要少。在非阻塞模式下,如果沒有可用的數據,則返回None,即一個空字節對象。
17 
18 f.readable()      #可以判斷當前文件打開模式是否可讀,是返回True,否則else
19 
20 f.seek()            #用來移動文件指針
21 
22 f.seekable()      #指針是否可操作
23 
24 f.tell()            #獲取指針位置
25 
26 f.truncate()    #截取數據,僅保留指定之前數據
27 
28 f.writable()     #是否可寫
29 
30 f.write()       #

  PS:在進行操作時註意文件句柄的位置

三、with語句

  為了避免打開文件後忘記關閉,可以通過管理上下文,即:

with open(‘file.txt‘,‘r+‘) as f:

    pass

  當with代碼塊執行完畢時,內部會自動關閉釋放文件資源。

  在2.7以上的版本,支持同時對多個文件上下文進行管理,即:

with open(‘file1.txt‘,‘r+‘) as f1,open(‘file2.txt‘,‘r+‘) as f2:

    pass

  寫這篇博客中有遇到一些問題,我會將這些問題寫進這篇博客中:python所遇問題合集

Python文件和目錄操作