Python/cPython 输入输出操作完全指南
概述
在Python编程中,输入输出(I/O)操作是与用户交互和持久化数据存储的基础。Python/cPython提供了多种灵活的方式来处理输入输出,从简单的打印到复杂的文件操作。本文将全面介绍Python中的各种I/O技术,帮助开发者掌握数据展示和存储的最佳实践。
格式化输出
Python提供了多种格式化输出的方法,每种方法都有其适用场景。
1. f-字符串(格式化字符串字面值)
f-字符串是Python 3.6引入的特性,通过在字符串前加f
或F
前缀,可以直接在字符串中嵌入表达式:
name = "Alice"
age = 25
print(f"My name is {name} and I'm {age} years old.")
f-字符串支持格式说明符:
import math
print(f"Pi value is approximately {math.pi:.3f}") # 保留3位小数
2. str.format()方法
这是Python传统的字符串格式化方法,提供了更详细的格式控制:
print("{} comes before {}".format("apple", "banana"))
print("{1} comes after {0}".format("apple", "banana"))
print("{fruit} is {color}".format(fruit="apple", color="red"))
3. 手动字符串格式化
对于简单的对齐需求,可以使用字符串方法:
str.rjust(width)
- 右对齐str.ljust(width)
- 左对齐str.center(width)
- 居中str.zfill(width)
- 用零填充数字
for x in range(1, 4):
print(str(x).rjust(2), str(x*x).rjust(3))
4. 旧式字符串格式化(%操作符)
虽然不推荐在新代码中使用,但在旧代码中仍常见:
print("The value is %5.2f" % 3.14159)
文件操作
Python通过内置的open()
函数处理文件I/O,支持文本和二进制模式。
文件打开模式
| 模式 | 描述 | |------|------| | 'r' | 只读(默认) | | 'w' | 写入(会覆盖) | | 'a' | 追加 | | 'b' | 二进制模式 | | '+' | 读写模式 |
最佳实践:使用with语句
使用with
语句可以确保文件正确关闭,即使发生异常:
with open('file.txt', 'r', encoding='utf-8') as f:
content = f.read()
常用文件方法
-
读取操作
f.read(size)
- 读取指定大小的内容f.readline()
- 读取一行f.readlines()
- 读取所有行到列表- 直接迭代文件对象(内存高效)
-
写入操作
f.write(string)
- 写入字符串f.writelines(sequence)
- 写入多行
-
文件定位
f.tell()
- 返回当前位置f.seek(offset, whence)
- 移动文件指针
文本模式与二进制模式
- 文本模式:处理字符串,自动转换换行符
- 二进制模式:处理字节,不进行任何转换
# 文本模式
with open('text.txt', 'w') as f:
f.write("Hello\nWorld")
# 二进制模式
with open('binary.bin', 'wb') as f:
f.write(b'\x48\x65\x6c\x6c\x6f')
JSON数据处理
Python的json
模块可以方便地在Python对象和JSON格式之间转换:
import json
# Python对象转JSON字符串
data = {'name': 'Alice', 'age': 25}
json_str = json.dumps(data)
# JSON字符串转Python对象
data = json.loads(json_str)
# 直接读写JSON文件
with open('data.json', 'w') as f:
json.dump(data, f)
with open('data.json', 'r') as f:
data = json.load(f)
总结
Python提供了丰富的I/O操作工具,从简单的字符串格式化到复杂的文件处理。掌握这些技术可以帮助开发者:
- 创建用户友好的输出格式
- 高效地读写各种文件
- 处理结构化数据(如JSON)
- 编写健壮的I/O代码(使用with语句)
在实际开发中,应根据具体需求选择合适的I/O方法,并始终注意资源管理和异常处理。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考