Python学习之输入输出
当初学Python编程时,其中一个最基础、也是最重要的部分就是如何处理输入和输出。无论是简单的用户输入,还是程序输出结果,都是很重要。现在,我们将一起学习Python输入输出的各种技巧和方法,让你在编写代码时得心应手。
在Python中,输入Input/输出Output(简称:I/O )是指程序与外部世界之间的数据交换。掌握输入输出 (I/O) 是必不可少的。
一、Python 中的 I/O 类型
| 类型 | 描述 |
|---|---|
| 标准输入输出 | 程序与键盘、显示器等标准设备之间的数据交换 |
| 文件 I/O | 程序与文件之间的数据交换 |
| 网络 I/O | 程序与网络之间的数据交换 |
二、标准输入输出
标准输入输出是指程序与键盘、显示器等标准设备之间的数据交换。在 Python 中,可以使用 input() 函数获取用户输入,可以使用 print() 函数输出数据。标准输入输出通常使用以下三个文件对象:
| 类型 | 对象 | 描述 | 默认指向 |
|---|---|---|---|
| 标准输入 | sys.stdin | 从键盘输入的数据 | 键盘 |
| 标准输出 | sys.stdout | 输出到显示器 | 显示器 |
| 标准错误输出 | sys.stderr | 输出到显示器 | 显示器 |
示例代码:
获取用户输入并输出到显示器。
#🌾 获取用户输入 name = input("请输入您的姓名:") #🌾 输出数据 print("欢迎使用,", name)
有上面的代码铺垫,下面我们开始逐个讲解:
1. 标准输入
标准输入有input函数、sys.stdin模块两部分。
🌾 input函数:
input(prompt) 函数允许你从键盘读取用户的输入。它会显示一个提示,然后等待用户输入,并返回用户输入的字符串。比如:
#🌾 获取用户输入 name = input("请输入您的姓名:") #🌾 输出数据 print("欢迎使用,", name)
🌾 sys.stdin:
sys 模块中的 stdin 对象允许你从标准输入中读取数据。你可以使用 sys.stdin.readline() 方法来读取一行输入。要使用这种方式,前提,你需要导入 sys 模块:
#🌾 引入sys模块 import sys
#🌾 调用sys模块 line = sys.stdin.readline() print("你输入的是:", line)
2. 标准输出
🌾 print函数:
print() 函数是最常见的输出方式。它将字符串表示的值打印到标准输出(通常是屏幕)。你可以传递多个参数给 print(),它们会以空格分隔,并在末尾默认添加换行符。比如,我们最初的代码“Hello, world!”:
#🌾 输出 print("Hello, world!") #🌾 end 参数来更改末尾的字符 print("Hello", end="") print(", world!")
🌾 sys.stdout:
你可以直接通过 sys.stdout.write() 方法写入标准输出。这对于需要更多控制输出格式的情况很有用:
#🌾 引入模块 import sys #🌾 调用模块 sys.stdout.write("Hello, world!\n")
三、文件 I/O
文件 I/O 使用 open() 函数打开文件,并使用 read()、write() 等方法进行读写操作。
| 操作 | 函数 | 描述 |
|---|---|---|
| 打开文件 | open() | 打开文件 |
| 读文件 | read() | 读取文件内容 |
| 写文件 | write() | 写入文件内容 |
示例代码:将文本写入到文件。
#🌾 打开文件 with open("my_file.txt", "w") as f: #🌾 写入文本 f.write("This is a test.")
上面示例代码,你可能看到了w,会有所疑惑,下面来看看这张表格,它解释了‘w’是什么。下面的这些模式允许你以不同的方式打开文件,进行读取、写入或追加操作。
| 模式 | 解释 | 描述 |
|---|---|---|
| 'r' | 读取模式(Read) | 打开文件用于读取。文件的指针将会放在文件的开头。这是默认模式。 |
| 'w' | 写入模式(Write) | 打开文件用于写入。如果文件存在,则覆盖文件。如果文件不存在,则创建新文件。 |
| 'a' | 追加模式(Append) | 打开文件用于追加内容。文件的指针将会放在文件的末尾。如果文件不存在,则创建新文件。 |
| 'rb' | 二进制读取模式(Read Binary) | 以二进制格式打开一个文件用于只读。文件的指针将会放在文件的开头。这个模式通常用于非文本文件,比如图像、音频等。 |
| 'wb' | 二进制写入模式(Write Binary) | 以二进制格式打开一个文件用于写入。如果文件存在,则覆盖文件。如果文件不存在,则创建新文件。这个模式也通常用于非文本文件的写入,比如图像、音频等。 |
| 'ab' | 二进制追加模式(Append Binary) | 以二进制格式打开一个文件用于追加内容。文件的指针将会放在文件的末尾。如果文件不存在,则创建新文件。这个模式也通常用于非文本文件的追加,比如图像、音频等。 |
| 'r+' | 读写模式(Read/Write) | 打开一个文件用于读写操作。文件的指针将会放在文件的开头。 |
| 'w+' | 写读模式(Write/Read) | 打开一个文件用于读写操作。如果文件存在,则覆盖文件。如果文件不存在,则创建新文件。文件的指针将会放在文件的开头。 |
| 'a+' | 追加读模式(Append/Read) | 打开一个文件用于读写操作。文件的指针将会放在文件的末尾。如果文件不存在,则创建新文件。 |
| 'rb+' | 二进制读写模式(Read/Write Binary) | 以二进制格式打开一个文件用于读写操作。文件的指针将会放在文件的开头。这个模式通常用于非文本文件的读写,比如图像、音频等。 |
| 'wb+' | 二进制写读模式(Write/Read Binary) | 以二进制格式打开一个文件用于读写操作。如果文件存在,则覆盖文件。如果文件不存在,则创建新文件。这个模式也通常用于非文本文件的读写,比如图像、音频等。 |
| 'ab+' | 二进制追加读模式(Append/Read Binary) | 以二进制格式打开一个文件用于读写操作。文件的指针将会放在文件的末尾。如果文件不存在,则创建新文件。这个模式也通常用于非文本文件的读写,比如图像、音频等。 |
根据你的需求和文件的类型,选择合适的模式非常重要,以确保文件被正确地读取或写入。
下面这张图是清晰的展示了文件的读写模式:

那么,我们通过下面的代码具体来学习一下:
1. 文件读取
🌾 使用 open() 函数:
使用 open() 函数可以打开一个文件,并返回一个文件对象,你可以对这个对象进行读取操作。基本的语法如下:
#🌾 打开文件并读取内容 with open('filename.txt', 'r') as f: content = f.read() print(content)
open()函数的第一个参数是文件名,第二个参数是模式。常见的模式就是上面的表格介绍的,这里简单写几个:'r':只读模式'w':写入模式,会覆盖文件中已有的内容'a':追加模式,会在文件末尾添加内容'b':二进制模式,用于处理非文本文件
🌾 逐行读取
使用 readline() 方法可以逐行读取文件内容,假设我们有一个文件名为filename.txt:
#🌾 打开文件逐行读取内容 with open('filename.txt', 'r') as f: for line in f: print(line.strip()) # strip() 用于移除行尾的换行符
2. 文件写入
🌾 使用 open() 函数:
使用 open() 函数以写入模式 'w' 打开文件,可以写入内容到文件中:
#🌾 写入内容到文件 with open('output.txt', 'w') as f: f.write("Hello, world!\n") f.write("This is a new line.\n")
🌾 使用 print() 函数:
你也可以使用 print() 函数将内容写入文件,通过指定 file 参数为打开的文件对象:
#🌾 写入内容到文件 with open('output.txt', 'w') as f: print("Hello, world!", file=f) print("This is a new line.", file=f)
3. 使用 with 语句
你可能也发现了,在上面的例子中,使用with 语句来打开文件。with 语句会在代码块执行完毕后自动关闭文件,这样可以确保在操作完成后正确地关闭文件并释放资源。
#🌾 使用 with 打开文集 with open('filename.txt', 'r') as f: content = f.read() print(content) #🌾 在这里,文件已经自动关闭
4. 异常处理
其实,很多时候,打开文件并不是那么顺利的,最好在处理文件时加上适当的异常处理(关于异常处理,后续我们会详细讲,这里只是展示给大家看,可以跳过),以应对文件不存在或无法读写等情况:
#🌾 异常处理 try: with open('filename.txt', 'r') as f: content = f.read() print(content) except FileNotFoundError: print("文件不存在!") except IOError: print("无法读取文件!")
那么,以上是一些常用的文件输入输出的方法,具体的选择取决于你的需求。
四、网络 I/O
网络 I/O 使用 socket 模块进行网络连接,并使用 send()、recv() 等方法进行数据发送和接收。
| 操作 | 模块 | 函数 | 描述 |
|---|---|---|---|
| 网络连接 | socket | socket() | 建立网络连接 |
| 数据发送 | send() | 发送数据 | |
| 数据接收 | recv() | 接收数据 |
🌾 示例代码:
创建一个简单的 HTTP 服务器 server.py,一般本机的地址都是127.0.0.1。
import socket # 创建一个 socket 对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定到本地地址和端口 s.bind(("127.0.0.1", 8310)) # 监听连接 s.listen(5) # 接受连接 conn, addr = s.accept() # b开头,发送数据 conn.send(b"This is Server: Hello, world!") # 接收数据 data = conn.recv(1024) # 在屏幕上输出收到的数据 print(data) # 关闭连接 conn.close() s.close()
🌾 客户端代码client.py:
import socket # 创建一个 socket 对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接到服务器端 s.connect(("127.0.0.1", 8310)) # b开头,发送数据 s.send(b"This is Client: Hello, world!") # 接收数据 data = s.recv(1024) # 在屏幕上输出收到的数据 print(data) # 关闭连接 s.close()
这时,我们将两个代码,分别保存。
然后,我们打开两个终端,第一个终端执行 server.py 文件:
$python server.py
第二个终端执行 server.py 文件:
$python client.py # 会输出如下: b'This is Server: Hello, world!'
回到服务器,会输出:
b‘This is Client: Hello, world!’
网络的内容还有很多,包括后期会讲的Requests库、urllib库、Asyncio库等等,这里关于网络的输入输出就简单讲这么多。
浙公网安备 33010602011771号