MST

星途 面试题库

面试题:Python数据存储格式转换之XML与Pickle

假设你有一个复杂的Python对象,包含自定义类的实例、嵌套的列表和字典。首先,将这个对象使用Pickle进行序列化并保存到文件。然后,编写代码将Pickle数据反序列化后,转换为XML格式数据并输出,XML要符合一定的结构规范,根节点为<root>,子节点根据对象结构合理设置。
39.2万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
import pickle
import xml.etree.ElementTree as ET


# 假设这是复杂的Python对象
class CustomClass:
    def __init__(self, value):
        self.value = value


data = {
    'custom_obj': CustomClass(42),
    'nested_list': [[1, 2], {'sub_key': 'sub_value'}],
    'nested_dict': {'key1': 'value1', 'key2': [3, 4]}
}

# 使用Pickle进行序列化并保存到文件
with open('data.pkl', 'wb') as f:
    pickle.dump(data, f)

# 反序列化Pickle数据
with open('data.pkl', 'rb') as f:
    unpickled_data = pickle.load(f)


# 将反序列化后的数据转换为XML
def to_xml(parent, data):
    if isinstance(data, dict):
        for key, value in data.items():
            child = ET.SubElement(parent, key)
            to_xml(child, value)
    elif isinstance(data, list):
        for item in data:
            child = ET.SubElement(parent, 'item')
            to_xml(child, item)
    elif isinstance(data, CustomClass):
        child = ET.SubElement(parent, 'CustomClass')
        value_elem = ET.SubElement(child, 'value')
        value_elem.text = str(data.value)
    else:
        parent.text = str(data)


root = ET.Element('root')
to_xml(root, unpickled_data)
xml_data = ET.tostring(root, encoding='utf8', method='xml')
print(xml_data.decode())