欢迎访问宙启技术站
智能推送

Python中的IO函数详解

发布时间:2023-06-06 08:40:34

在Python中,IO函数是非常重要的。IO函数负责数据的输入和输出,即读取数据或者将数据写入到某个文件中。在Python中,有三种常用的IO函数,分别是文件读写、管道和网络套接字。本篇文章将要详细讲解这三种IO函数。

一、文件读写

文件读写是Python中最基本的IO操作。它通常用于读取或者写入一个文本文件或者二进制文件。Python的内置open函数可以用于打开文件,它接受两个参数, 个参数是文件名,第二个参数是打开文件的方式,包括“r”(只读)、“w”(只写)、“a”(追加写)、“b”(二进制文件)、“+”(读写模式)等。下面是一个文件读取的例子:

f = open("sample.txt", "r")
print(f.read())
f.close()

在上面的例子中,我们使用open函数打开了一个名为sample.txt的文件,并且指定以只读模式(r)打开该文件。然后我们使用read方法读取文件中的所有内容,并且输出到屏幕上。最后我们使用close方法关闭该文件。

下面是一个文件写入的例子:

f = open("sample.txt", "w")
f.write("Hello World!")
f.close()

在上面的例子中,我们使用open函数打开一个名为sample.txt的文件,并且指定以只写模式(w)打开该文件。然后我们使用write方法将字符串“Hello World!”写入该文件中,并最终用close方法来保存并关闭该文件。

二、管道

管道是Python中的一个重要的I/O函数,它可以用于多个进程之间的数据传输。管道有两种:匿名管道和具名管道。匿名管道是一种以文件描述符为基础的半双工I/O通信机制,它只能在父进程和子进程之间进行通信。具名管道是一种以文件路径为基础的全双工I/O通信机制,它可以对任意进程进行通信。

下面是一个使用匿名管道进行进程间通信的例子:

import os

r, w = os.pipe()
pid = os.fork()

if pid:
    os.close(w)
    r = os.fdopen(r)
    print("Parent read:", r.read())
else:
    os.close(r)
    w = os.fdopen(w, 'w')
    w.write("Hello from child!")
    w.close()

在上面的例子中,我们创建了一个管道,并使用os.fork()创建了一个子进程。如果是父进程,我们关闭了管道写端(w),并使用os.fdopen()将管道读端(r)转换为File对象。我们使用File对象的read()函数读取来自子进程的消息,并在控制台中打印。“Hello from child!”。

如果是子进程,我们关闭了管道读端(r),并使用os.fdopen()将管道写端(w)转换为File对象。我们使用File对象的write()函数发送一条消息到管道中。

三、网络套接字

Python中的网络套接字常用于客户端和服务端之间的通信。Python的socket模块提供了这些套接字。下面是一个简单的服务器例子:

import socket

HOST = "localhost"
PORT = 65432

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print("Connected by ", addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)

在上面的例子中,我们创建了一个TCP服务器套接字,并且绑定到本地主机的指定端口。我们使用s.listen()函数来监听来自客户端的连接请求。如果有客户端建立了连接,我们使用s.accept()函数来接受连接,并返回了一个新的套接字和一个地址。然后我们使用conn.recv()函数从客户端读取数据,并使用conn.sendall()函数将该数据发送回客户端。

客户端例子如下:

import socket

HOST = "localhost"
PORT = 65432
data = "Hello from client!"

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(data.encode())
    data = s.recv(1024)

print("Received: ", repr(data.decode()))

在上面的例子中,我们首先创建了一个TCP客户端套接字,并且连接到远程服务器的指定端口。然后我们使用s.sendall()函数将数据发送到服务器,并且使用s.recv()函数从服务器接收数据。最后我们将收到的数据打印在控制台上。

总结

Python中的IO函数是非常重要的。它们可以被用于文件读写、管道和网络套接字。在实际应用中,我们需要根据具体的场景选择合适的IO函数来进行数据的读写和传输。同时,需要注意的是,在使用IO函数时,我们需要遵循相应的文件读写、管道和套接字协议,使应用程序能够正常地进行通信。