【Python百宝箱】数据格式化大作战:探索Python强大的转换和验证库

前言

在现代数据处理和转换的领域中,Python成为了一种强大而灵活的工具。数据格式的转换和验证对于数据科学家、工程师和分析师而言是至关重要的任务。本文将介绍一系列Python库,它们能够处理各种数据格式,从JSON、XML到Excel和Pickle等,为您提供了广泛的选择来转换、验证和操作不同类型的数据。

欢迎订阅专栏:Python库百宝箱:解锁编程的神奇世界

【Python百宝箱】JSON vs. CSV vs. YAML vs. XML vs. HDF5vs. XLS:数据格式之争

文章目录

    • 前言
  • Python数据魔法:解析与转换多种格式的利器
    • 1 **`jsonschema`**
      • 1.1 数据验证与模式
        • 1.1.1 概述
        • 1.1.2 模式定义与验证规则
      • 1.2 高级模式和约束
        • 1.2.1 数组和集合的约束
        • 1.2.2 自定义验证函数
      • 1.3 错误处理与消息定制
        • 1.3.1 异常处理与自定义消息
        • 1.3.2 自定义错误处理器
    • 2 **`xml.etree.ElementTree`**
      • 2.1 XML数据解析
        • 2.1.1 基本XML解析
        • 2.1.2 遍历XML结构
      • 2.2 XML数据生成与创建
        • 2.2.1 创建XML数据
      • 2.3 XML数据修改与删除
        • 2.3.1 修改XML数据
    • 3 **`Pandas`**
      • 3.1 数据处理与分析基础
        • 3.1.1 数据结构介绍
        • 3.1.2 数据索引与选取
      • 3.2 数据清洗与预处理
        • 3.2.1 缺失值处理
        • 3.2.2 重复值检测与处理
    • 4 **`NumPy`**
      • 4.1 数组与矩阵操作
        • 4.1.1 创建与操作数组
        • 4.1.2 数组运算与计算
      • 4.2 数学函数与统计方法
        • 4.2.1 常用数学函数
        • 4.2.2 统计与随机数生成
    • 5 **`YAML`**
      • 5.1 YAML基础
        • 5.1.1 YAML语法与结构
        • 5.1.2 YAML数据类型
      • 5.2 数据解析与生成
        • 5.2.1 YAML文件读取与写入
      • 5.3 高级特性与应用
        • 5.3.1 自定义对象序列化
        • 5.3.2 复杂结构的处理
    • 6 **`csv`**
      • 6.1 CSV文件基础
        • 6.1.1 CSV文件格式
        • 6.1.2 读写CSV文件
      • 6.2 数据处理与转换
        • 6.2.1 数据过滤与筛选
        • 6.2.2 数据导出与格式化
    • 7 **`PyYAML`**
      • 7.1 YAML加载与转换
        • 7.1.1 YAML加载方法
        • 7.1.2 YAML转换与解析
      • 7.2 定制化与扩展功能
        • 7.2.1 自定义标签处理
        • 7.2.2 序列化与反序列化配置
    • 8 **`xmltodict`**
      • 8.1 XML数据转换为字典
        • 8.1.1 XML到字典的转换
        • 8.1.2 字典到XML的转换
      • 8.2 高级功能与应用
        • 8.2.1 嵌套数据结构处理
        • 8.2.2 XML与JSON互转
    • 9 **`openpyxl`**
      • 9.1 Excel文件基础操作
        • 9.1.1 创建与写入Excel文件
        • 9.1.2 读取Excel文件内容
      • 9.2 数据处理与操作
        • 9.2.1 行列操作与格式化
        • 9.2.2 图表和样式设置
    • 10 **`pickle`**
      • 10.1 对象序列化与反序列化
        • 10.1.1 对象序列化
        • 10.1.2 对象反序列化
      • 10.2 高级功能与安全性
        • 10.2.1 处理高级对象
        • 10.2.2 安全性与注意事项
      • 总结

Python数据魔法:解析与转换多种格式的利器

1 jsonschema

JSON Schema 是一种用于验证 JSON 数据的规范,它允许定义数据的结构、类型和约束。jsonschema 是 Python 中用于实现 JSON Schema 验证的库。

1.1 数据验证与模式

数据验证是确保 JSON 数据符合特定规范或模式的过程。JSON Schema 定义了这些模式,jsonschema 库提供了验证这些模式的工具。

1.1.1 概述

JSON Schema 使用 JSON 格式定义了数据的预期结构。以下是一个简单的 JSON Schema 示例:

from jsonschema import validate# JSON Schema 定义
schema = {"type": "object","properties": {"name": {"type": "string"},"age": {"type": "number"}},"required": ["name", "age"]
}# 待验证的数据
data = {"name": "Alice","age": 30
}# 进行数据验证
try:validate(instance=data, schema=schema)print("数据验证成功!")
except Exception as e:print(f"数据验证失败:{e}")

这个例子中,我们定义了一个包含 nameage 字段的 JSON Schema,并使用 validate() 方法验证了一个 JSON 对象是否符合该模式。

1.1.2 模式定义与验证规则

在 JSON Schema 中,可以使用各种关键字来定义模式规则,如 typepropertiesrequired 等。这些关键字允许你定义 JSON 对象中各个属性的类型、结构和必要性。

以下是一个更复杂的示例,展示了如何使用更多的 JSON Schema 关键字:

from jsonschema import validate# 更复杂的 JSON Schema 定义
complex_schema = {"type": "object","properties": {"name": {"type": "string"},"age": {"type": "number"},"address": {"type": "object","properties": {"street": {"type": "string"},"city": {"type": "string"},"zip": {"type": "string", "pattern": "\\d{5}(-\\d{4})?"}},"required": ["street", "city"]}},"required": ["name", "age"]
}# 待验证的数据
complex_data = {"name": "Bob","age": 25,"address": {"street": "123 Main St","city": "Anytown","zip": "12345"}
}# 进行数据验证
try:validate(instance=complex_data, schema=complex_schema)print("复杂数据验证成功!")
except Exception as e:print(f"复杂数据验证失败:{e}")

这个例子展示了如何定义一个包含嵌套对象的复杂 JSON Schema,并验证一个包含此结构的 JSON 对象。

1.2 高级模式和约束

JSON Schema 不仅限于基本的类型验证,还允许应用更复杂的模式和约束,以确保数据的完整性和准确性。

1.2.1 数组和集合的约束

JSON Schema 支持对数组和集合类型的约束,可以定义元素类型、最小/最大长度、唯一性等规则。

# 数组约束示例
array_schema = {"type": "array","items": {"type": "number"},"minItems": 1,"uniqueItems": True
}array_data = [1, 2, 3, 4, 5]  # Valid arraytry:validate(instance=array_data, schema=array_schema)print("数组约束验证成功!")
except Exception as e:print(f"数组约束验证失败:{e}")
1.2.2 自定义验证函数

除了内置的验证关键字外,JSON Schema 还支持自定义验证函数,允许用户编写自己的验证逻辑。

# 自定义验证函数示例
def validate_even(instance):if instance % 2 != 0:raise ValueError("Value must be an even number")custom_schema = {"type": "number","multipleOf": 2
}data_to_validate = 4  # Valid datatry:validate(instance=data_to_validate, schema=custom_schema)print("自定义验证函数验证成功!")
except Exception as e:print(f"自定义验证函数验证失败:{e}")

这些例子展示了 JSON Schema 的高级用法,包括对数组和集合的约束以及自定义验证函数。JSON Schema 提供了丰富的工具来

1.3 错误处理与消息定制

JSON Schema 的验证过程中,错误处理和消息定制是确保有效验证和详细反馈的重要方面。

1.3.1 异常处理与自定义消息

jsonschema 库允许捕获不同类型的异常,以便更精确地处理验证失败的情况,并自定义错误消息。

from jsonschema import exceptions# 定义一个错误消息
error_message = ""# JSON Schema 定义
schema = {"type": "object","properties": {"name": {"type": "string"},"age": {"type": "number"}},"required": ["name", "age"]
}# 待验证的数据(缺少'age'字段)
data_missing_age = {"name": "Alice"
}# 进行数据验证
try:validate(instance=data_missing_age, schema=schema)print("数据验证成功!")
except exceptions.ValidationError as e:error_message = e.messageprint(f"数据验证失败:{error_message}")
1.3.2 自定义错误处理器

通过自定义错误处理器,可以根据验证失败的具体情况进行更细致的处理和消息定制。

def custom_error_handler(error):# 自定义错误处理if error.validator == 'required':return f"必要字段 '{error.path[-1]}' 未提供"elif error.validator == 'type':return f"字段 '{error.path[-1]}' 类型错误,期望类型为 {error.validator_value}"else:return "未知错误发生"# 使用自定义错误处理器
try:validate(instance=data_missing_age, schema=schema)print("数据验证成功!")
except exceptions.ValidationError as e:error_message = custom_error_handler(e)print(f"数据验证失败:{error_message}")

自定义错误消息和错误处理器允许更精确地反馈数据验证失败的原因,使得开发者能够更好地理解和处理验证错误。

这些例子展示了 jsonschema 库中处理异常和定制消息的方法。这些功能使得数据验证过程更具可控性和定制性,提高了数据验证的准确性和有用性。

2 xml.etree.ElementTree

XML 是一种常见的标记语言,xml.etree.ElementTree 是 Python 的内置模块,提供了解析和处理 XML 数据的功能。

2.1 XML数据解析

XML 数据解析是将 XML 格式的数据转换为Python能够理解和操作的形式的过程。

2.1.1 基本XML解析

以下是一个简单的示例,演示如何使用 xml.etree.ElementTree 解析 XML 数据:

import xml.etree.ElementTree as ET# XML数据
xml_data = '''
<bookstore><book category="cooking"><title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price></book><book category="children"><title lang="en">Harry Potter</title><author>J.K. Rowling</author><year>2005</year><price>29.99</price></book>
</bookstore>
'''# 解析XML数据
root = ET.fromstring(xml_data)# 遍历XML数据
for book in root.findall('book'):title = book.find('title').textauthor = book.find('author').textyear = book.find('year').textprice = book.find('price').textprint(f"Title: {title}, Author: {author}, Year: {year}, Price: {price}")

在这个示例中,我们解析了一个包含书籍信息的简单 XML,并使用 find() 方法获取了各个元素的内容。

2.1.2 遍历XML结构

xml.etree.ElementTree 允许遍历整个 XML 结构以提取所需信息,比如使用迭代器遍历所有元素。以下是一个例子:

# 假设 root 是之前解析得到的根节点
for elem in root.iter():print(f"Tag: {elem.tag}, Attributes: {elem.attrib}, Text: {elem.text}")

这段代码演示了如何使用 iter() 方法遍历 XML 结构中的所有元素,并打印出每个元素的标签名、属性和文本内容。

这些例子展示了如何使用 xml.etree.ElementTree 解析和遍历 XML 数据,从中提取所需的信息。

2.2 XML数据生成与创建

除了解析外,xml.etree.ElementTree 还允许创建新的 XML 数据或修改现有 XML 结构。

2.2.1 创建XML数据
# 创建根节点
new_root = ET.Element("bookstore")# 创建子元素
book1 = ET.SubElement(new_root, "book")
book2 = ET.SubElement(new_root, "book")# 设置属性
book1.set("category", "cooking")
book2.set("category", "children")# 添加子元素
title1 = ET.SubElement(book1, "title")
title1.text = "Everyday Italian"title2 = ET.SubElement(book2, "title")
title2.text = "Harry Potter"# 生成XML字符串
new_xml_data = ET.tostring(new_root)
print(new_xml_data.decode())

这个例子演示了如何使用 xml.etree.ElementTree 创建新的 XML 数据。 Element()SubElement() 方法用于创建元素,set() 用于设置属性,tostring() 用于生成 XML 字符串。

2.3 XML数据修改与删除

xml.etree.ElementTree 允许修改现有的 XML 数据,包括添加、修改和删除元素。

2.3.1 修改XML数据

以下是一个修改 XML 数据的示例:

# 假设 root 是之前解析得到的根节点
for book in root.findall('book'):price_element = book.find('price')price_value = float(price_element.text)price_element.text = str(price_value + 5)  # 增加价格# 生成修改后的XML字符串
updated_xml_data = ET.tostring(root)
print(updated_xml_data.decode())

这段代码演示了如何修改 XML 数据。在此示例中,我们遍历书籍的价格并将其增加了 5。

3 Pandas

Pandas 是一个功能强大且灵活的数据分析库,它提供了用于处理和操作数据的丰富工具集。

3.1 数据处理与分析基础

Pandas 提供了两种主要数据结构:Series 和 DataFrame。

3.1.1 数据结构介绍

Series 是一维数组,每个元素都有对应的索引。以下是创建和使用 Series 的示例:

import pandas as pd# 创建一个Series
data = pd.Series([1, 2, 3, 4, 5], index=['A', 'B', 'C', 'D', 'E'])
print(data)

DataFrame 是二维表格数据结构,每列可以是不同的数据类型。以下是创建和使用 DataFrame 的示例:

# 创建一个DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],'Age': [25, 30, 35],'City': ['New York', 'San Francisco', 'Los Angeles']
}
df = pd.DataFrame(data)
print(df)
3.1.2 数据索引与选取

Pandas 允许对数据进行灵活的索引和选取操作。

# 选择DataFrame的列
ages = df['Age']# 使用loc和iloc进行行选择
row = df.loc[0]  # 使用索引标签选择行
row2 = df.iloc[1]  # 使用整数位置选择行

这些示例介绍了如何使用 Pandas 创建 Series 和 DataFrame,并展示了对数据进行索引和选取的基本操作。

3.2 数据清洗与预处理

数据清洗和预处理是数据分析中至关重要的步骤,Pandas 提供了许多功能来处理缺失数据和重复值。

3.2.1 缺失值处理

Pandas 中的缺失值通常表示为 NaN,可以使用 dropna()fillna() 方法来处理缺失值。

# 删除包含缺失值的行
cleaned_data = df.dropna()# 用指定值填充缺失值
filled_data = df.fillna(0)
3.2.2 重复值检测与处理

Pandas 提供了 duplicated()drop_duplicates() 方法来处理重复值。

# 检测重复行
duplicates = df.duplicated()# 删除重复行
unique_data = df.drop_duplicates()

这些示例展示了如何使用 Pandas 处理数据清洗和预处理的常见任务。

4 NumPy

NumPy 是 Python 中用于数值计算的核心库,它提供了高性能的多维数组对象和各种工具。

4.1 数组与矩阵操作

4.1.1 创建与操作数组

NumPy 中最常用的对象是 ndarray,它是具有相同类型和大小的多维数组。

import numpy as np# 创建一个一维数组
arr1d = np.array([1, 2, 3, 4, 5])# 创建一个二维数组
arr2d = np.array([[1, 2, 3], [4, 5, 6]])# 数组索引和切片
print(arr1d[0])  # 输出第一个元素
print(arr2d[1, 1])  # 输出第二行第二列的元素
4.1.2 数组运算与计算

NumPy 提供了广泛的数学函数和运算符,可以直接应用于数组。

# 数组运算
arr = np.array([1, 2, 3, 4, 5])# 对数组元素进行平方
squared = np.square(arr)# 计算数组元素的和、均值、标准差等统计量
total = np.sum(arr)
mean_value = np.mean(arr)
std_deviation = np.std(arr)

4.2 数学函数与统计方法

4.2.1 常用数学函数

NumPy 提供了大量的数学函数,如三角函数、指数函数等。

# 计算正弦值、指数值等
angles = np.array([0, np.pi/2, np.pi])
sine_values = np.sin(angles)
exponential_values = np.exp(angles)
4.2.2 统计与随机数生成

NumPy 提供了统计函数和随机数生成功能。

# 随机数生成
random_array = np.random.rand(5)  # 生成一个包含5个随机数的数组
mean_random = np.mean(random_array)  # 计算随机数数组的均值

这些示例介绍了 NumPy 中的数组创建、运算、数学函数和统计方法。 NumPy 在科学计算和数据处理中有着广泛的应用,提供了高效的数值计算功能。

5 YAML

YAML(YAML Ain’t Markup Language)是一种人类友好的数据序列化格式,具有易读性和可扩展性。Python 中有许多库可用于处理 YAML 格式数据,其中 yaml 是常用的一个。

5.1 YAML基础

YAML 使用缩进和冒号来表示数据结构,支持包含列表、字典和标量数据。

5.1.1 YAML语法与结构

以下是一个简单的 YAML 示例:

# YAML示例
person:name: John Doeage: 30occupation: Developer
5.1.2 YAML数据类型

YAML 支持多种数据类型,包括字符串、整数、浮点数、布尔值、列表和字典等。

5.2 数据解析与生成

5.2.1 YAML文件读取与写入

yaml 库提供了方法来读取和写入 YAML 格式的数据。

读取 YAML 文件示例:

import yaml# 从YAML文件读取数据
with open('data.yaml', 'r') as file:data = yaml.safe_load(file)print(data)

写入数据到 YAML 文件示例:

# 将数据写入YAML文件
data = {'name': 'Alice','age': 25,'occupation': 'Engineer'
}with open('output.yaml', 'w') as file:yaml.dump(data, file)

这些示例演示了如何使用 yaml 库读取和写入 YAML 文件。

5.3 高级特性与应用

5.3.1 自定义对象序列化

yaml 库允许注册自定义类以进行对象序列化和反序列化。

class Person:def __init__(self, name, age):self.name = nameself.age = agedef person_representer(dumper, data):return dumper.represent_mapping('!person', {'name': data.name, 'age': data.age})yaml.add_representer(Person, person_representer)# 创建自定义对象
person_obj = Person('Bob', 30)# 对象序列化为YAML格式
print(yaml.dump(person_obj))
5.3.2 复杂结构的处理

对于嵌套的复杂数据结构,yaml 库支持更多高级特性来处理。

# 复杂结构的处理示例
complex_data = {'name': 'Bob','details': {'age': 30,'job': 'Engineer'},'languages': ['Python', 'JavaScript', 'C++']
}print(yaml.dump(complex_data))

这些是关于使用 yaml 库处理 YAML 格式数据的基本示例。

6 csv

CSV(逗号分隔值)是一种常见的文件格式,用于存储表格数据。Python 中的 csv 模块提供了读写 CSV 文件的功能。

6.1 CSV文件基础

CSV 文件通常由行和列组成,每行表示数据记录,每列表示数据字段。

6.1.1 CSV文件格式

CSV 文件使用逗号或其他字符作为字段的分隔符,并且每行具有相同数量的字段。以下是一个简单的 CSV 示例:

Name, Age, City
Alice, 25, New York
Bob, 30, San Francisco
Charlie, 35, Los Angeles
6.1.2 读写CSV文件

csv 模块提供了 readerwriter 对象,用于读取和写入 CSV 文件。

import csv# 读取CSV文件
with open('data.csv', 'r') as file:csv_reader = csv.reader(file)for row in csv_reader:print(row)# 写入CSV文件
data = [['Name', 'Age', 'City'],['Alice', '25', 'New York'],['Bob', '30', 'San Francisco'],['Charlie', '35', 'Los Angeles']
]with open('output.csv', 'w', newline='') as file:csv_writer = csv.writer(file)csv_writer.writerows(data)

6.2 数据处理与转换

6.2.1 数据过滤与筛选

使用 csv 模块可以对数据进行过滤和筛选,以满足特定条件。

# 读取CSV文件并筛选特定条件的行
with open('data.csv', 'r') as file:csv_reader = csv.DictReader(file)filtered_data = [row for row in csv_reader if row['Age'] > '25']for row in filtered_data:print(row)
6.2.2 数据导出与格式化

csv 模块还提供了各种方法来导出和格式化数据,以满足特定需求。

# 导出选定列到新的CSV文件
with open('data.csv', 'r') as file:csv_reader = csv.DictReader(file)selected_columns = ['Name', 'Age']with open('selected_data.csv', 'w', newline='') as output_file:csv_writer = csv.DictWriter(output_file, fieldnames=selected_columns)csv_writer.writeheader()for row in csv_reader:csv_writer.writerow({col: row[col] for col in selected_columns})

7 PyYAML

PyYAML 是一个功能强大的 Python 库,用于解析和生成 YAML 格式的数据。

7.1 YAML加载与转换

7.1.1 YAML加载方法

PyYAML 提供了 safe_load() 方法用于从 YAML 字符串中加载数据。

import yamlyaml_string = """
name: John Doe
age: 30
occupation: Developer
"""# 加载YAML数据
data = yaml.safe_load(yaml_string)
print(data)
7.1.2 YAML转换与解析

PyYAML 还提供了 dump() 方法用于将 Python 对象转换为 YAML 格式。

# 将Python数据结构转换为YAML
data = {'name': 'Alice','age': 25,'job': 'Engineer'
}
yaml_data = yaml.dump(data)
print(yaml_data)

7.2 定制化与扩展功能

7.2.1 自定义标签处理

PyYAML 允许用户自定义标签处理器,以便在加载或转换过程中处理特定的数据类型。

# 自定义标签处理器示例
def custom_tag_constructor(loader, node):# 自定义处理逻辑return Noneyaml.add_constructor('!custom_tag', custom_tag_constructor)
7.2.2 序列化与反序列化配置

PyYAML 还支持序列化和反序列化的配置,例如设置缩进、宽度等。

# 设置缩进和宽度
yaml.dump(data, default_flow_style=False, indent=4)

8 xmltodict

xmltodict 是一个用于将 XML 数据转换为 Python 字典(dict)的库,简化了处理 XML 数据的过程。

8.1 XML数据转换为字典

8.1.1 XML到字典的转换

xmltodict 库提供了 parse() 方法,用于将 XML 数据解析并转换为 Python 字典。

import xmltodict# XML数据
xml_data = """
<bookstore><book category="cooking"><title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price></book><book category="children"><title lang="en">Harry Potter</title><author>J.K. Rowling</author><year>2005</year><price>29.99</price></book>
</bookstore>
"""# 将XML转换为字典
parsed_dict = xmltodict.parse(xml_data)
print(parsed_dict)
8.1.2 字典到XML的转换

xmltodict 也支持将 Python 字典转换回 XML 格式。

# 将字典转换为XML
xml_str = xmltodict.unparse(parsed_dict, pretty=True)
print(xml_str)

8.2 高级功能与应用

8.2.1 嵌套数据结构处理

xmltodict 能够处理复杂的嵌套 XML 数据结构,并转换为嵌套的 Python 字典。

# 更复杂的XML数据
complex_xml_data = """
<root><person><name>John</name><age>30</age><contacts><email>john@example.com</email><phone>1234567890</phone></contacts></person>
</root>
"""# 解析XML并转换为字典
parsed_complex_dict = xmltodict.parse(complex_xml_data)
print(parsed_complex_dict)
8.2.2 XML与JSON互转

xmltodict 还允许将 XML 数据与 JSON 格式相互转换。

# 将XML转换为JSON
json_data = xmltodict.unparse(parsed_dict, pretty=True)
print(json_data)

9 openpyxl

openpyxl 是一个用于读写 Excel 文件的 Python 库,可以处理 .xlsx 格式的文件。

9.1 Excel文件基础操作

9.1.1 创建与写入Excel文件

openpyxl 提供了创建新的 Excel 文件并写入数据的功能。

from openpyxl import Workbook# 创建一个新的工作簿
workbook = Workbook()# 激活默认的工作表
sheet = workbook.active# 写入数据到单元格
sheet['A1'] = 'Name'
sheet['B1'] = 'Age'
sheet['A2'] = 'Alice'
sheet['B2'] = 25# 保存工作簿
workbook.save(filename='example.xlsx')
9.1.2 读取Excel文件内容

openpyxl 也允许读取现有的 Excel 文件内容。

from openpyxl import load_workbook# 加载现有的工作簿
workbook = load_workbook(filename='example.xlsx')# 获取工作表
sheet = workbook.active# 读取单元格数据
name = sheet['A2'].value
age = sheet['B2'].valueprint(f"Name: {name}, Age: {age}")

9.2 数据处理与操作

9.2.1 行列操作与格式化

openpyxl 提供了许多方法用于操作行列和格式化单元格。

# 设置单元格格式
sheet['A1'].font = Font(bold=True)
sheet['B2'].number_format = '0.00'# 插入行和列
sheet.insert_rows(2)
sheet.insert_cols(2)# 删除行和列
sheet.delete_rows(2)
sheet.delete_cols(2)
9.2.2 图表和样式设置

openpyxl 还支持添加图表和设置样式等高级操作。

from openpyxl.chart import BarChart, Reference# 添加图表
chart = BarChart()
data = Reference(sheet, min_col=2, min_row=1, max_col=3, max_row=5)
categories = Reference(sheet, min_col=1, min_row=2, max_row=5)
chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)
sheet.add_chart(chart, "E1")

以上是一个示例,展示了如何使用openpyxl添加柱状图到 Excel 工作表中。这些功能可以帮助用户创建复杂的工作表、添加图表,并对单元格进行样式设置。

10 pickle

pickle 是 Python 中用于序列化和反序列化对象的标准模块,它能够将 Python 对象转换为字节流,便于存储和传输。

10.1 对象序列化与反序列化

10.1.1 对象序列化

pickle 提供了 dump() 方法,用于将 Python 对象序列化为字节流并保存到文件中。

import pickle# 待序列化的数据
data = {'name': 'Alice', 'age': 30, 'occupation': 'Engineer'}# 将对象序列化为字节流并写入文件
with open('data.pickle', 'wb') as file:pickle.dump(data, file)
10.1.2 对象反序列化

pickleload() 方法用于从文件中读取字节流并反序列化为 Python 对象。

# 从文件中读取字节流并反序列化对象
with open('data.pickle', 'rb') as file:loaded_data = pickle.load(file)print(loaded_data)

10.2 高级功能与安全性

10.2.1 处理高级对象

pickle 可以处理许多 Python 对象类型,包括自定义类的实例、函数、模块等。

class Person:def __init__(self, name, age):self.name = nameself.age = age# 序列化自定义类的实例
person = Person('Bob', 25)
with open('person.pickle', 'wb') as file:pickle.dump(person, file)
10.2.2 安全性与注意事项

pickle 序列化的数据可以包含可执行代码,因此需要注意从不受信任的源加载 pickle 数据。

# 潜在安全风险:不要加载不受信任的pickle数据
malicious_data = b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00}\x94.'# 尝试加载不受信任的pickle数据(此示例中不会执行)
try:loaded_malicious_data = pickle.loads(malicious_data)
except pickle.UnpicklingError as e:print(f"UnpicklingError: {e}")

总结

在本文中,我们深入研究了多个Python库,它们提供了丰富的功能,可用于处理和转换各种数据格式。无论是处理结构化数据还是序列化对象,这些库都为数据科学和数据处理提供了强大的工具。通过这些库,用户可以轻松地进行数据验证、清洗、转换和操作,从而更有效地处理不同类型和来源的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

electron持久化cookie的方法,从session中获取

文章目录 1. 持久化方法2. 代码说明3. 补充 1. 持久化方法 session.defaultSession.cookies.get({}).then((cookies) > {// 恢复cookie现场cookies.forEach((cookiesItem) > {let { secure false, domain "", path "" } cookiesItem;BrowserWin…

零基础打靶—CTF4靶场

一、打靶的主要五大步骤 1.确定目标&#xff1a;在所有的靶场中&#xff0c;确定目标就是使用nmap进行ip扫描&#xff0c;确定ip即为目标&#xff0c;其他实战中确定目标的方式包括nmap进行扫描&#xff0c;但不局限于这个nmap。 2.常见的信息收集&#xff1a;比如平常挖洞使用…

Python标准库:math库【侯小啾python领航班系列(十六)】

Python标准库:math库【侯小啾python领航班系列(十六)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

【每日一题】找出叠涂元素

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;哈希表 写在最后 Tag 【哈希表】【数组】【2023-12-01】 题目来源 2661. 找出叠涂元素 题目解读 从左往右遍历 arr 给矩阵 mat 上色&#xff0c;在上色的过程中矩阵的某一行或者某一列的全部被上色了&#xff0c;返回…

(C语言)找出1-99之间的全部同构数

同构数&#xff1a;它出现在平方数的右边。例&#xff1a;5是25右边的数&#xff0c;25是625右边的数&#xff0c;即5和25均是同构数。 #include<stdio.h> int main() {for(int i 1;i < 100;i ){if((i*i % 10 i) || (i*i % 100 i))printf("%d\t%d\n",i,…

第6章 异步爬虫

目录 1. 协程的基本原理1.1 案例引入1.2 基础知识阻塞非阻塞同步异步多进程协程 1.3 协程的用法1.4 定义协程1.5 绑定回调1.6 多任务协程1.7 协程实现1.8 使用aiohttp安装使用 2. aiohttp的使用2.1 基本介绍2.2 基本实例2.3 URL参数设置2.4 其他请求类型2.5 POST请求表单提交JS…

Java数据结构之《哈希查找》题目

一、前言&#xff1a; 这是怀化学院的&#xff1a;Java数据结构中的一道难度中等的一道编程题(此方法为博主自己研究&#xff0c;问题基本解决&#xff0c;若有bug欢迎下方评论提出意见&#xff0c;我会第一时间改进代码&#xff0c;谢谢&#xff01;) 后面其他编程题只要我写完…

ChatGPT成为“帮凶”:生成虚假数据集支持未知科学假设

ChatGPT 自发布以来&#xff0c;就成为了大家的好帮手&#xff0c;学生党和打工人更是每天都离不开。 然而这次好帮手 ChatGPT 却帮过头了&#xff0c;莫名奇妙的成为了“帮凶”&#xff0c;一位研究人员利用 ChatGPT 创建了虚假的数据集&#xff0c;用来支持未知的科学假设。…

HarmonyOS应用开发——程序框架UIAbility、启动模式与路由跳转

前言 UIAbility简单来说就是一种包含用户界面的应用组件&#xff0c;用于和用户进行交互。每一个UIAbility实例&#xff0c;对应于一个最近任务列表中的任务。 一个应用可以有一个UIAbility&#xff0c;也可以有多个UIAbility。一个UIAbility可以对应于多个页面&#xff0c;建议…

半监督语义分割综述

paper link&#xff1a;https://arxiv.org/pdf/2302.09899.pdf 1. Introduction 图像分割是最古老、研究最广泛的计算机视觉 (CV) 问题之一。图像分割是指将图像划分为不同的非重叠区域&#xff0c;并将相应的标签分配给图像中的每个像素&#xff0c;最终获得ROI区域位置及其类…

线上CPU飙高问题排查!

https://v.douyin.com/iRTqH5ug/ linux top命令 top 命令是 Linux 下一个强大的实用程序&#xff0c;提供了系统资源使用情况的动态、实时概览。它显示了当前正在运行的进程信息&#xff0c;以及有关系统性能和资源利用情况的信息。 以下是 top 命令提供的关键信息的简要概述…

Linux 内核源码各版本下载

下载地址&#xff1a; kernel/git/stable/linux.git - Linux kernel stable treehttps://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/refs/ 1. Linux 内核的基本概念&#xff1a; 内核是什么&#xff1f; 内核是操作系统的核心部分&#xff0c;负责管理系统…

springboot工作原理

Spring Boot 是一个用于创建独立的、基于Spring框架的Java应用程序的开发框架。它简化了Spring应用程序的配置和部署过程&#xff0c;提供了一种快速、方便的方式来构建可扩展的、可部署的应用程序。 Spring Boot 的工作原理可以概括如下&#xff1a; 1. 自动配置&#xff08…

割裂式“多渠道”不是真正的全渠道!浅析全渠道零售和DTC在理念上的不谋而合|徐礼昭

图文&#xff1a;徐礼昭 全渠道零售概念解析 全渠道零售概念由来已久&#xff0c;单纯从业务经营角度&#xff0c;一个品牌在线上线下多个渠道铺货卖货&#xff0c;只能说是多渠道零售&#xff0c;而不是全渠道零售。商派市场负责人徐礼昭认为&#xff0c;品牌企业应该从消费者…

Java JDBC SQLite 示例

SQLite是一个简单、小巧、快速、可靠、无服务器、零配置和无需安装的 SQL 数据库库&#xff0c;它与客户端应用程序在进程中运行。尽管www.sqlite.org没有官方的 JDBC 驱动程序库&#xff0c;但www.xerial.org提供了一个——一个 XML 数据库管理系统项目。 1.下载SQLite JDBC驱…

wpf devexpress 使用IDataErrorInfo实现input验证

此处下载源码 当form初始化显示&#xff0c;Register按钮应该启动和没有输入错误应该显示。如果用户点击注册按钮在特定的输入无效数据&#xff0c;form将显示输入错误和禁用的注册按钮。实现逻辑在标准的IDataErrorInfo接口。请查阅IDataErrorInfo接口&#xff08;System.Com…

Fabric:创建应用通道

搭建自定义网络可以参考文章&#xff1a; https://blog.csdn.net/yeshang_lady/article/details/134113296 1 创建通道 网络搭建完成之后&#xff0c;就可以开始创建通道了。Fabric V2.5.4中可以在不创建系统通道的情况下直接创建应用通道。 1.1 修改配置文件 先创建配置文…

【AIGC】接着昨天的AI“洗图”骚操作,继续调戏国产大模型

目录 一、洗稿&#xff0c;洗图&#xff0c;洗视频 二、如何洗图 2.1 先看看效果 2.2 如何做的 2.3 提示词示例 三、试试星火和通义 2.1 星火和通义的特点 2.2 星火的做图能力理解力强&#xff0c;准确度还有待提高 2.3 通义大模型伺候 2.4 这3个大模型可以配合使用 …

【1day】华天软件 OA ntkodownload接口任意文件读取学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现

结构体||联合体

1.结构体 1.1实际生活中一些东西往往有多个元素组成。如一名学生有身高、体重、名字、学号等。这时候就需要用到结构体。 结构体是一些值的结合&#xff0c;这些值被称为成员变量。结构体的每个成员可以是不同类型的变量&#xff0c;如&#xff1a;标量、数组、指针、甚至是其…