Python作為一種高級編程語言,特別適合處理I/O操作。在Python中,使用文件句柄來進行文件I/O操作,而fileno方法就是一種獲取文件句柄的方法。fileno方法將返回一個整數類型的文件描述符,這個文件描述符可以被用於文件I/O操作。
一、使用fileno方法獲取文件句柄
在Python中,可以使用open函數打開文件,並返回一個文件對象。使用文件對象的fileno方法可以獲取該文件對象的文件句柄。
fp = open('test.txt') fd = fp.fileno()
上例中,文件test.txt被打開,文件對象fp被創建,然後文件對象的fileno方法被調用,返回該文件對象的文件句柄fd。通過文件句柄,可以進行文件I/O操作。
二、通過文件句柄進行文件讀寫操作
通過文件句柄可以進行文件讀寫操作。在Python中,可以使用os模塊中的read和write函數進行I/O操作。讀取文件的方式有很多種,比如按字節數讀取,按行讀取等等。
import os fd = os.open('test.txt', os.O_RDONLY) buf = os.read(fd, 1024) os.close(fd)
上例中,使用os模塊中的open函數打開文件test.txt,返迴文件句柄fd,然後使用os模塊中的read函數讀取文件內容到緩衝區buf中,讀取最多1024個字節。讀取完成後,需要使用os模塊中的close函數關閉文件句柄。
三、使用文件句柄進行I/O重定向
使用文件句柄進行I/O重定向可以將程序的標準輸入、標準輸出、標準錯誤輸出重定向到指定的文件中。在Python中,0、1、2三個文件描述符分別代表標準輸入、標準輸出、標準錯誤輸出,可以通過修改這些文件描述符來重定向I/O。
import os fd = os.open('test.txt', os.O_WRONLY | os.O_CREAT) os.dup2(fd, 1) os.close(fd) print('hello world')
上例中,使用os模塊中的open函數打開文件test.txt,並返迴文件句柄fd,然後使用os模塊中的dup2函數將標準輸出重定向到文件句柄fd所指向的文件中。關閉文件句柄後,使用print函數輸出內容,內容將被重定向到文件中。可以使用cat命令查看文件內容:
$ python3 test.py $ cat test.txt hello world
四、使用文件句柄進行套接字I/O操作
使用文件句柄進行套接字I/O操作可以完成網絡通信,可以使用socket模塊創建服務器和客戶端。在Python中,可以使用文件句柄來進行套接字I/O操作。
import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('localhost', 8080)) sock.send(b'hello world') response = sock.recv(1024) print(response) sock.close()
上例中,創建了一個TCP套接字,並連接到本地地址的8080端口。然後發送字符串’hello world’,並接收服務器返回的數據。接收到的數據被打印到控制台上。最後關閉套接字。
五、使用select模塊進行異步I/O操作
使用select模塊可以進行異步I/O操作,可以讓程序能夠同時處理多個I/O請求。在Python中,可以使用文件句柄進行異步I/O操作。
import select rlist, _, _ = select.select([sock.fileno()], [], []) if rlist: response = sock.recv(1024) print(response)
上例中,使用select模塊的select函數來偵測一個可讀的套接字(文件句柄),當該套接字可讀時,執行接收操作,並將接收到的數據打印到控制台上。
六、小結
通過上述介紹,我們可以看到,在Python中,使用文件句柄進行I/O操作非常方便。通過文件句柄可以進行文件讀寫操作、I/O重定向、套接字I/O操作、異步I/O操作等等,對於處理I/O密集型任務非常有用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/292916.html