Python3 输入和输出详解

Python3 输入和输出详解

小陶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

阅读(126)

评论(0)

收藏

举报

刷新页面返回顶部

相关推荐