Python中使用处理数据、路径的2个方法,对应两个第三方库
Python中使用dataclass
处理数据、pathlib
处理路径
dataclass装饰器
主要用于存储数据的类。下面将详细介绍它的用法:
1. 基本用法
dataclass
能够自动生成特殊方法,像 __init__
、__repr__
、__eq__
等。以下是一个简单的示例:
from dataclasses import dataclass@dataclass
class Person:name: strage: int# 创建一个 Person 对象
p = Person("Alice", 30)# 打印对象,自动调用 __repr__ 方法
print(p) # 比较两个对象,自动调用 __eq__ 方法
p2 = Person("Alice", 30)
print(p == p2)
2. 默认值
你可以为类的属性设定默认值:
from dataclasses import dataclass@dataclass
class Person:name: str = "Unknown"age: int = 0p = Person()
print(p)
3. 不可变数据类
让数据类的实例不可变,可将 frozen
参数设为 True
:
from dataclasses import dataclass@dataclass(frozen=True)
class Point:x: inty: intp = Point(1, 2)
# 以下代码会抛出异常,因为实例是不可变的
# p.x = 3
4. 自定义方法
数据类同样可以包含自定义方法:
from dataclasses import dataclass@dataclass
class Rectangle:width: floatheight: floatdef area(self):return self.width * self.heightr = Rectangle(3, 4)
print(r.area())
5. 字段元数据
你可以使用 field
函数为字段添加元数据:
from dataclasses import dataclass, field@dataclass
class InventoryItem:name: strunit_price: floatquantity_on_hand: int = field(default=0, metadata={'unit': 'pieces'})def total_cost(self):return self.unit_price * self.quantity_on_handitem = InventoryItem("Widget", 10.0, 5)
print(item.total_cost())
dataclass
减少样板代码,简单实现数据管理类的编写、维护。
pathlib.Path
Python 标准库 pathlib
模块提供的一个用于处理文件系统路径的类。
pathlib.Path
的用途
1. 基础用法
pathlib.Path
提供了面向对象的接口来处理文件和目录路径,使代码更具可读性和可维护性。基础用法:
from pathlib import Path# 创建一个 Path 对象
path = Path('example_dir') / 'example_file.txt'# 获取文件名
filename = path.name
print(filename)# 获取文件扩展名
extension = path.suffix
print(extension)
2. 跨平台兼容性
不同操作系统使用不同的路径分隔符(如 Windows 使用反斜杠 \
,而 Unix-like 系统使用正斜杠 /
)。pathlib.Path
会自动处理这些差异,确保你的代码在不同操作系统上都能正常工作。例如:
from pathlib import Path# 在 Windows 和 Unix-like 系统上都能正确处理
path = Path('parent_dir') / 'child_dir' / 'file.txt'
3. 文件和目录操作
pathlib.Path
提供了一系列方法来执行文件和目录操作,如创建、删除、重命名等。例如:
from pathlib import Path# 创建一个新的目录
new_dir = Path('new_directory')
new_dir.mkdir(exist_ok=True)# 创建一个新的文件并写入内容
file_path = new_dir / 'test.txt'
file_path.write_text('Hello, World!')# 读取文件内容
content = file_path.read_text()
print(content)# 删除文件和目录
file_path.unlink()
new_dir.rmdir()
4. 路径遍历和搜索
遍历目录树和搜索文件。例如,查找当前目录下所有的 Python 文件:
from pathlib import Path# 查找当前目录下所有的 Python 文件
python_files = Path('.').glob('*.py')
for file in python_files:print(file)
与直接使用字符串的区别
1. 可读性和可维护性
使用 pathlib.Path
可以使代码更具可读性
字符串拼接路径:
# 使用字符串拼接路径
file_path = 'parent_dir' + '/' + 'child_dir' + '/' + 'file.txt'
使用 pathlib.Path
拼接路径:
from pathlib import Path# 使用 Path 对象拼接路径
file_path = Path('parent_dir') / 'child_dir' / 'file.txt'
2. 错误处理
pathlib.Path
会自动处理路径分隔符和转义字符等问题
# Windows 上使用字符串表示路径
windows_path = 'C:\\Users\\username\\Documents\\file.txt'# 或者使用原始字符串
windows_path = r'C:\Users\username\Documents\file.txt'
使用 pathlib.Path
:
from pathlib import Path# Windows 上使用 Path 对象表示路径
windows_path = Path('C:/Users/username/Documents/file.txt')
3. 功能丰富性
pathlib.Path
提供了丰富的方法和属性来执行各种文件和目录操作
# 使用字符串检查文件是否存在
import osfile_path = 'test.txt'
if os.path.exists(file_path):print('文件存在')
使用 pathlib.Path
:
from pathlib import Pathfile_path = Path('test.txt')
if file_path.exists():print('文件存在')
写在最后,建议在 Python 代码中优先使用 pathlib.Path
来代替直接使用字符串表示路径。