一、Python文件操作精要
1.1 文件操作三要素模型
文件处理遵循打开-操作-关闭(OAC)核心范式。在Python中,open()
函数返回的文件对象包含三个关键属性:
file = open('data.txt', 'r', encoding='utf-8')
print(file.closed) # 文件关闭状态
print(file.mode) # 打开模式
print(file.name) # 文件路径
1.2 路径处理规范
- 相对路径:
../data/config.json
(基于当前工作目录) - 绝对路径:
C:/Project/data/2024/report.xlsx
- 跨平台处理:推荐使用
pathlib
模块
from pathlib import Path
config_path = Path('config') / 'settings.ini' # 自动处理路径分隔符
1.3 编码与二进制模式
模式 | 说明 | 典型场景 |
---|---|---|
r | 文本只读(默认) | 配置文件读取 |
rb | 二进制只读 | 图片/视频处理 |
w+ | 文本读写(覆盖) | 日志文件轮转 |
ab+ | 二进制追加读写 | 实时数据采集 |
# 图像文件拷贝示例(二进制模式)
with open('input.jpg', 'rb') as src, open('output.jpg', 'wb') as dst:
dst.write(src.read())
1.4 高级读写技巧
- 大文件分块处理:避免内存溢出
def process_large_file(path, chunk_size=1024 * 1024):
with open(path, 'rb') as f:
while chunk := f.read(chunk_size):
yield chunk
- 内存映射技术:实现零拷贝操作
import mmap
with open('data.bin', 'r+b') as f:
mm = mmap.mmap(f.fileno(), 0)
mm[1024:1028] = b'TEST' # 直接修改内存区域
二、JSON数据处理全解析
2.1 JSON与Python类型映射
JSON类型 | Python等效 | 特殊说明 |
---|---|---|
object | dict | 键必须为字符串类型 |
array | list | 元素类型需统一 |
string | str | 必须双引号包裹 |
true | True | 首字母小写 |
null | None | 区分None与字符串"null" |
2.2 序列化与反序列化
- 基础操作
import json
data = {"name": "李雷", "scores": [85, 92, 78]}
json_str = json.dumps(data, ensure_ascii=False, indent=2) # 中文支持
restored = json.loads(json_str)
- 自定义序列化
class User:
def __init__(self, name, age):
self.name = name
self.age = age
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, User):
return {'username': obj.name, 'years': obj.age}
return super().default(obj)
user = User('韩梅梅', 28)
print(json.dumps(user, cls=CustomEncoder))
2.3 企业级应用方案
- 流式JSON解析:处理GB级数据
import ijson
def extract_orders(path):
with open(path, 'rb') as f:
items = ijson.items(f, 'orders.item')
return [item for item in items if item['amount'] > 1000]
- Schema验证:确保数据合规性
from jsonschema import validate
schema = {
"type": "object",
"properties": {
"email": {"type": "string", "format": "email"},
"age": {"type": "number", "minimum": 18}
}
}
validate(instance=data, schema=schema)
三、企业级最佳实践
3.1 文件操作规范
- 资源管理:强制使用
with
语句 - 异常处理:完整覆盖IOError场景
try:
with open('data.log', 'r') as f:
process(f.read())
except FileNotFoundError:
logging.error("文件不存在")
except UnicodeDecodeError:
logging.error("编码格式错误")
3.2 高性能JSON处理
库名称 | 序列化速度 | 反序列化速度 | 内存占用 | 适用场景 |
---|---|---|---|---|
json | 1x | 1x | 中等 | 通用场景 |
ujson | 3x | 4x | 低 | 纯数据解析 |
orjson | 5x | 6x | 低 | 大数据量处理 |
# 使用orjson提升性能
import orjson
data = orjson.dumps({"timestamp": datetime.now()}) # 自动处理日期
3.3 自动化测试集成
- 测试数据驱动
import unittest
class APITest(unittest.TestCase):
@classmethod
def setUpClass(cls):
with open('testcases.json') as f:
cls.cases = json.load(f)
def test_login(self):
for case in self.cases['login']:
res = api_login(case['user'], case['pwd'])
self.assertEqual(res.status, case['expected'])
四、典型问题解决方案
4.1 中文路径处理
- 系统区域设置:控制面板→区域→格式→中文(简体)
- 编程规范:路径前添加
r
避免转义
path = r'D:\项目\2024\数据采集\中文目录\data.json'
4.2 JSON特殊类型处理
- 日期序列化
class DateTimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)
- Decimal精度控制
from decimal import Decimal
json_str = json.dumps({'price': Decimal('19.99')}, default=str)
五、总结与展望
5.1 核心要点回顾
- 文件操作:掌握模式选择、路径处理、大文件处理方案
- JSON处理:理解类型映射、掌握高性能解析方法
- 企业实践:规范编码风格、集成自动化测试
5.2 未来发展方向
- 云存储集成:使用
fsspec
统一访问本地与云端存储 - 二进制协议:探索
Protocol Buffers
与MessagePack
替代方案 - 实时流处理:结合
Kafka
实现文件变更实时监控
通过系统掌握文件与JSON操作的核心技术栈,开发者可以构建出从简单脚本到分布式系统的完整数据处理能力。建议在实际项目中结合pandas
等数据分析库,充分发挥Python在数据处理领域的生态优势。
最新技术动态请关注作者:Python×CATIA工业智造
版权声明:转载请保留原文链接及作者信息