小陶coding
欢迎您的访问,专注于分享最有价值的互联网技术干货。
Python3 输入和输出详解
在 Python 编程中,输入(Input)和输出(Output)是与用户交互和数据处理的基础操作。本文将深入解析 Python3 中各种输入输出方式的使用方法、底层原理及最佳实践,帮助开发者构建高效、友好的程序交互界面。
一、标准输入输出(控制台交互)
1. 标准输出:print() 函数
print() 是 Python 最基本的输出函数,用于将对象转换为字符串并打印到标准输出(通常是控制台)。
常用参数:
sep:分隔多个对象的字符串(默认空格)
end:结尾字符串(默认换行符 \n)
file:输出目标(默认 sys.stdout)
flush:是否强制刷新缓冲区(默认 False)
示例:
# 基本用法
print("Hello", "World", sep=", ", end="!\n") # 输出:Hello, World!
# 格式化输出
name = "Alice"
age = 30
print(f"Name: {name}, Age: {age}") # 输出:Name: Alice, Age: 30
# 输出到文件
with open("output.txt", "w") as f:
print("This is a test", file=f)
2. 标准输入:input() 函数
input() 用于从标准输入读取用户输入的一行文本(以换行符结束),返回字符串类型。
示例:
# 基本用法
name = input("请输入您的姓名: ")
print(f"欢迎, {name}!")
# 转换输入类型
age = int(input("请输入您的年龄: ")) # 注意手动类型转换
print(f"您的年龄是: {age}")
二、格式化输出方法
1. 旧式格式化(% 操作符)
基于 C 语言的 printf 风格,使用 % 作为占位符:
name = "Bob"
age = 25
print("姓名: %s, 年龄: %d" % (name, age)) # 输出:姓名: Bob, 年龄: 25
2. 字符串方法 format()
Python 2.6+ 引入的格式化方法,使用 {} 作为占位符:
# 位置参数
print("姓名: {}, 年龄: {}".format("Charlie", 35)) # 输出:姓名: Charlie, 年龄: 35
# 关键字参数
print("姓名: {name}, 年龄: {age}".format(name="David", age=40))
# 访问对象属性
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Eve", 28)
print("姓名: {p.name}, 年龄: {p.age}".format(p=p))
3. f - 字符串(Python 3.6+)
最现代的格式化方法,在字符串前加 f,直接嵌入表达式:
name = "Frank"
age = 32
print(f"姓名: {name.upper()}, 年龄: {age + 2}") # 输出:姓名: FRANK, 年龄: 34
# 格式化数字
pi = 3.1415926
print(f"Pi: {pi:.2f}") # 输出:Pi: 3.14
三、文件输入输出
1. 文件操作基础
使用 open() 函数打开文件,返回文件对象,支持多种模式:
r:读取(默认)
w:写入(覆盖现有内容)
a:追加
b:二进制模式
+:读写模式
示例:
# 写入文件
with open("data.txt", "w") as f:
f.write("Hello, World!\n")
f.writelines(["Line 1\n", "Line 2\n"]) # 写入多行
# 读取文件
with open("data.txt", "r") as f:
content = f.read() # 读取全部内容
print(content)
# 逐行读取
f.seek(0) # 重置文件指针到开头
for line in f:
print(line.strip()) # 去除行尾换行符
2. 上下文管理器(with 语句)
自动管理文件的打开和关闭,避免资源泄漏:
# 推荐写法
with open("data.txt", "r") as f:
data = f.read()
# 等效于手动管理
f = open("data.txt", "r")
try:
data = f.read()
finally:
f.close() # 无论是否发生异常,都确保文件关闭
3. 二进制文件操作
使用 b 模式处理二进制数据(如图片、视频):
# 复制二进制文件
with open("source.jpg", "rb") as src, open("target.jpg", "wb") as dst:
dst.write(src.read())
四、高级输入输出技术
1. 命令行参数解析(argparse 模块)
处理复杂的命令行参数,生成帮助信息:
import argparse
parser = argparse.ArgumentParser(description="计算两数之和")
parser.add_argument("num1", type=int, help="第一个数字")
parser.add_argument("num2", type=int, help="第二个数字")
parser.add_argument("-v", "--verbose", action="store_true", help="显示详细计算过程")
args = parser.parse_args()
result = args.num1 + args.num2
if args.verbose:
print(f"{args.num1} + {args.num2} = {result}")
else:
print(result)
执行示例:
python calculator.py 3 5 # 输出:8
python calculator.py 3 5 -v # 输出:3 + 5 = 8
python calculator.py --help # 显示帮助信息
2. 序列化与反序列化
将对象转换为可存储或传输的格式:
JSON 格式:
import json
# 序列化
data = {"name": "Grace", "age": 33, "hobbies": ["reading", "swimming"]}
with open("data.json", "w") as f:
json.dump(data, f, indent=2) # 写入JSON文件
# 反序列化
with open("data.json", "r") as f:
loaded_data = json.load(f)
print(loaded_data["name"]) # 输出:Grace
Pickle 格式(Python 专用):
import pickle
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Henry", 40)
# 序列化
with open("person.pkl", "wb") as f:
pickle.dump(p, f)
# 反序列化
with open("person.pkl", "rb") as f:
loaded_p = pickle.load(f)
print(loaded_p.name) # 输出:Henry
3. 标准流重定向
临时修改标准输入 / 输出:
import sys
# 重定向标准输出到文件
original_stdout = sys.stdout
with open("output.log", "w") as f:
sys.stdout = f
print("This will be written to the file")
sys.stdout = original_stdout # 恢复标准输出
print("This will be printed on the console")
五、错误处理与异常输入
1. 输入验证
确保用户输入符合预期格式:
while True:
try:
age = int(input("请输入您的年龄: "))
if age < 0:
raise ValueError("年龄不能为负数")
break
except ValueError as e:
print(f"输入错误: {e},请重新输入")
2. 文件操作异常
处理文件不存在、权限不足等问题:
try:
with open("nonexistent.txt", "r") as f:
data = f.read()
except FileNotFoundError:
print("文件不存在,请检查路径")
except PermissionError:
print("没有权限访问该文件")
except Exception as e:
print(f"发生未知错误: {e}")
六、最佳实践
优先使用 f - 字符串:代码更简洁,性能更优。
避免硬编码文件路径:使用os.path或pathlib处理跨平台路径。
及时关闭文件:始终使用with语句管理文件资源。
处理二进制数据:明确区分文本模式(r/w)和二进制模式(rb/wb)。
验证用户输入:防止非法输入导致程序崩溃。
使用标准库模块:如argparse处理命令行参数,json处理数据序列化。
通过掌握上述输入输出技术,开发者可以构建功能丰富、交互友好的 Python 程序,高效处理各种数据格式和用户需求。
posted on
2025-07-18 10:42
小陶coding
阅读(136)
评论(0)
收藏
举报
刷新页面返回顶部