Python3 输入和输出
Python3 输入和输出
🎯 学习目标
掌握 Python 中 标准输入输出(I/O) 的基本操作,包括控制台、文件、以及格式化输出。能够熟练使用 input()
、print()
、open()
等函数进行数据读写,并结合实际场景处理文本与二进制数据。
🔑 核心重点
分类 | 内容 |
---|---|
控制台交互 | 使用 input() 和 print() 实现用户交互 |
文件读写 | 使用 open() 打开文件,支持多种模式(r/w/a/rb/wb/ab) |
格式化输出 | 使用字符串格式化方法:f-string、.format() 、% 操作符 |
二进制数据处理 | 读写图片、音频等非文本数据 |
异常处理 | 在文件操作中捕获异常,确保资源释放 |
📚 详细讲解
一、控制台输入输出
✅ print()
函数:输出信息到控制台
print("Hello, World!")
参数说明:
sep
: 多个参数之间的分隔符,默认为空格end
: 输出结束时的字符,默认为换行\n
file
: 输出的目标,默认是sys.stdout
print("Python", "is", "great", sep="-", end="!\n")
# 输出:Python-is-great!
✅ input()
函数:从控制台获取输入
name = input("请输入你的名字:")
print(f"你好,{name}!")
📌 注意:返回值始终是字符串类型,如需数字需转换:
age = int(input("请输入年龄:"))
二、文件读写操作
✅ 打开文件:open()
函数
file = open('example.txt', 'r') # r: 读取;w: 写入;a: 追加
常见模式:
模式 | 含义 |
---|---|
'r' |
只读(文件必须存在) |
'w' |
写入(清空已有内容或创建新文件) |
'a' |
追加(保留原有内容) |
'r+' |
读写(文件必须存在) |
'rb' , 'wb' , 'ab' |
以二进制方式读写 |
✅ 关闭文件:close()
file.close()
📌 更推荐使用 with
上下文管理器自动关闭文件:
with open('example.txt', 'r') as file:
content = file.read()
print(content)
# 文件自动关闭,无需调用 close()
三、读写文件内容的方法
✅ 读取内容:
read()
: 一次性读取全部内容readline()
: 逐行读取readlines()
: 返回所有行组成的列表
with open('example.txt', 'r') as f:
lines = f.readlines()
for line in lines:
print(line.strip())
✅ 写入内容:
write(string)
: 写入字符串writelines(list_of_strings)
: 写入多行字符串
with open('output.txt', 'w') as f:
f.write("第一行\n")
f.writelines(["第二行\n", "第三行\n"])
四、格式化输出
✅ 方法1:f-string(推荐)
name = "Alice"
age = 25
print(f"姓名:{name},年龄:{age}")
✅ 方法2:.format()
方法
print("姓名:{0},年龄:{1}".format(name, age))
✅ 方法3:%
格式化(旧版本兼容)
print("姓名:%s,年龄:%d" % (name, age))
五、处理二进制文件(如图片、视频等)
适用于图像、音频、视频等非文本文件。
with open('photo.jpg', 'rb') as src:
with open('copy_photo.jpg', 'wb') as dst:
dst.write(src.read())
📌 特点:
- 二进制模式不会进行编码转换
- 适合复制、加密、压缩等操作
⚠️ 注意事项
- 使用
with
确保文件正确关闭,避免资源泄露 - 文件路径应尽量使用绝对路径或相对当前脚本目录
- 读写文件前建议先检查是否存在(可使用
os.path.exists()
) - 处理大文件时建议逐行读取,避免内存溢出
- 不同操作系统对路径斜杠
/
和\
支持不同,建议使用os.path
或pathlib
🧪 实际案例分析
📌 场景:构建一个简单的日志记录工具
功能需求:
- 用户输入一条日志内容
- 自动添加时间戳并保存到文件中
- 支持多次输入,每次追加记录
示例代码:
import datetime
log_file = 'app.log'
while True:
entry = input("请输入日志内容(q退出):")
if entry.lower() == 'q':
break
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_entry = f"[{timestamp}] {entry}\n"
with open(log_file, 'a') as f:
f.write(log_entry)
print("已记录日志。")
📌 输出示例(在 app.log
中):
[2025-06-02 22:30:15] 用户登录成功
[2025-06-02 22:31:45] 数据加载完成
🧩 拓展练习(动手实践)
- 编写程序,读取一个文本文件并统计其中单词数量。
- 创建一个倒计时程序,将每秒的剩余时间写入文件。
- 实现一个“日记本”程序,允许用户每天记录内容,自动按日期命名文件。
- 编写一个程序,批量重命名指定目录下的所有
.txt
文件。 - 实现一个“备份工具”,将指定文件夹中的文件复制到另一个位置,并记录操作日志。
📚 推荐阅读
- Python 官方文档 - Input and Output
- 《流畅的 Python》第 9 章 - 文件 I/O
- 廖雪峰 Python 教程 - 文件读写
- 菜鸟教程 - Python 文件读写
- Real Python - Reading and Writing Files in Python
🧭 下一步建议
- 下一章学习内容:《Python3 错误和异常处理》
- 掌握异常机制的基本结构(try/except/else/finally)
- 学会自定义异常类
- 理解断言(assert)和上下文管理器的高级用法
- 结合 I/O 操作,提升程序健壮性和安全性
如果你希望我为你提供:
- Python 输入输出速查表 PDF(含常用函数+模式+格式化方式)
- 更多实战项目练习题(如日志系统、备份工具、文本分析器等)
- 视频教学资源推荐(中文讲解)
- 如何结合
logging
模块实现专业级日志系统
欢迎随时告诉我 😊
Python print
函数格式化输出详解
目标
掌握如何使用 Python 的 print
函数进行格式化输出,以提高代码的可读性和灵活性。
核心重点
- 使用
%
操作符进行基本格式化。 - 利用
.format()
方法进行更灵活的字符串格式化。 - 采用 f-string(Python 3.6+)实现简洁且高效的格式化输出。
一、使用 %
操作符进行格式化
基本概念
在早期版本的 Python 中,常用 %
操作符来进行字符串格式化。它的工作方式类似于 C 语言中的 printf
函数。
示例:
name = "Alice"
age = 25
print("My name is %s and I am %d years old." % (name, age))
输出:
My name is Alice and I am 25 years old.
格式化符号:
符号 | 描述 |
---|---|
%s |
字符串 |
%d |
整数 |
%f |
浮点数 |
%.<number of digits>f |
小数点后保留几位小数的浮点数 |
示例:
pi = 3.1415926
print("Pi value is %.2f" % pi)
输出:
Pi value is 3.14
二、利用 .format()
方法进行格式化
.format()
方法提供了比 %
更强大和灵活的格式化功能,支持命名参数和位置参数。
示例:
name = "Bob"
age = 30
print("My name is {} and I am {} years old.".format(name, age))
输出:
My name is Bob and I am 30 years old.
高级用法:
-
指定位置参数:
print("{1} is {0} years old.".format(age, name))
输出:
Bob is 30 years old.
-
命名参数:
print("My name is {n} and I am {a} years old.".format(n=name, a=age))
输出:
My name is Bob and I am 30 years old.
-
对齐和填充:
print("{:<10}|{:>10}".format("left", "right"))
输出:
left | right
三、采用 f-string 实现简洁且高效的格式化输出
自 Python 3.6 起引入了 f-string,即在字符串前加上 f
或 F
,可以在字符串中直接嵌入变量表达式,极大地简化了格式化过程。
示例:
name = "Charlie"
age = 35
print(f"My name is {name} and I am {age} years old.")
输出:
My name is Charlie and I am 35 years old.
高级用法:
-
表达式计算:
x = 10 y = 20 print(f"The sum of x and y is {x + y}")
输出:
The sum of x and y is 30
-
函数调用:
def greet(): return "Hello, World!" print(f"Greeting: {greet()}")
输出:
Greeting: Hello, World!
-
条件表达式:
score = 85 print(f"Result: {'Pass' if score >= 60 else 'Fail'}")
输出:
Result: Pass
四、总结
%
操作符适用于简单的格式化需求,但语法较为固定。.format()
方法提供了更高的灵活性和强大的格式化选项,适合需要复杂格式化的场景。- f-string以其简洁性和高效性成为现代 Python 编程中最推荐使用的格式化方法,尤其适合快速开发和调试。
通过掌握这三种不同的格式化方法,你可以根据具体需求选择最合适的方式来进行字符串格式化,从而编写出更加清晰易懂的代码。
Python print
函数格式化输出详解
目标
掌握如何使用 Python 的 print
函数进行格式化输出,以提高代码的可读性和灵活性。
核心重点
- 使用
%
操作符进行基本格式化。 - 利用
.format()
方法进行更灵活的字符串格式化。 - 采用 f-string(Python 3.6+)实现简洁且高效的格式化输出。
- 深入了解字符串格式化符号列表及辅助的格式化操作指令。
四、字符串格式化符号列表详解
在使用 %
操作符进行格式化时,不同的类型需要不同的格式化符号。以下是常用的格式化符号及其用途:
基本格式化符号
符号 | 描述 |
---|---|
%s |
字符串 (string) |
%d |
整数 (decimal integer) |
%f |
浮点数 (floating point) |
%c |
字符 (character) |
%b |
二进制 (binary) |
%o |
八进制 (octal) |
%x / %X |
十六进制 (hexadecimal),小写/大写字母 |
%e / %E |
科学计数法 (exponential notation),小写/大写字母 |
%g / %G |
根据值自动选择 %f 或 %e ,小写/大写字母 |
示例:
name = "Alice"
age = 25
pi = 3.1415926
char = 'A'
binary = 0b1010
octal = 0o12
hexa = 0xA
print("Name: %s" % name)
print("Age: %d" % age)
print("Pi value: %.2f" % pi)
print("Char: %c" % char)
print("Binary: %b" % binary)
print("Octal: %o" % octal)
print("Hexadecimal: %x" % hexa)
输出:
Name: Alice
Age: 25
Pi value: 3.14
Char: A
Binary: 1010
Octal: 12
Hexadecimal: a
五、辅助的格式化操作指令详解
除了基本的格式化符号外,还可以通过一些辅助的操作来进一步控制输出的格式。这些操作通常紧跟在 %
符号后面,并放在格式化符号之前。
1. 宽度和对齐
-
指定宽度:可以在格式化符号前加上数字来指定最小字段宽度。
print("%10s" % "Hello") # 右对齐 print("%-10s" % "Hello") # 左对齐
输出:
Hello Hello
-
填充字符:可以通过在宽度前面加上特定字符来指定填充字符。
print("%05d" % 42) # 用零填充 print("%-10s" % "Hello") # 左对齐并用空格填充
输出:
00042 Hello
2. 精度
对于浮点数,可以指定小数点后的位数。
print("%.2f" % 3.1415926) # 小数点后保留两位
print("%10.2f" % 3.1415926) # 宽度为10,小数点后保留两位
输出:
3.14
3.14
3. 标志
标志用于控制输出的一些特殊行为,如正负号显示等。
-
加号 (
+
) 和减号 (-
) 显示:强制显示正负号。print("%+d" % 42) # 显示正号 print("%+d" % -42) # 显示负号
输出:
+42 -42
-
空格 (
print("% d" % 42) # 正数前加空格 print("% d" % -42) # 负数前无空格
输出:
42 -42
4. 千位分隔符
可以通过 ','
来启用千位分隔符。
print("%d" % 1000000) # 不带千位分隔符
print("% ,d" % 1000000) # 带千位分隔符
输出:
1000000
1,000,000
5. 科学计数法与常规表示法
-
%e
和%E
:科学计数法,小写或大写 E。print("%e" % 123456789) # 小写 e print("%E" % 123456789) # 大写 E
输出:
1.234568e+08 1.234568E+08
-
%g
和%G
:根据数值大小自动选择%f
或%e
。print("%g" % 123456789) # 自动选择 print("%g" % 0.000000123) # 自动选择
输出:
1.23457e+08 1.23e-07
六、总结
%
操作符适用于简单的格式化需求,但语法较为固定。.format()
方法提供了更高的灵活性和强大的格式化选项,适合需要复杂格式化的场景。- f-string以其简洁性和高效性成为现代 Python 编程中最推荐使用的格式化方法,尤其适合快速开发和调试。
- 格式化符号和辅助的格式化操作指令能够帮助你更精确地控制输出的格式,使你的代码更加清晰和易读。
通过深入了解这些格式化工具和技巧,你可以根据具体需求选择最合适的方式来增强代码的表现力和可维护性。