开发者

一文带你玩转Python必备的几种数据格式

目录
  • 前言
  • 1. jsON - 轻量级的数据交换格式
  • 2. CSV - 表格数据的最佳选择
  • 3. XML - 结构化文档的标准
  • 4. YAML - 人性化的配置文件格式
  • 5. Pickle - python对象的二进制序列化
  • 6. Parquet - 高效的大数据列式存储
  • 7. Protocol Buffers - 高效的二进制序列化格式
  • 数据格式对比与选择建议
  • 格式转换技巧
    • JSON转CSV
    • CSV转JSON
    • Pandas多格式转换
  • 结语

    前言

    在Python开发中,数据格式的选择直接影响着程序的性能和可维护性。不同的数据格式有着各自的特点和适用场景。本文将详细介绍Python开发中最常用的几种数据格式,包括它们的特性、使用场景以及相互转换方法,帮助你根据实际需求选择最合适的数据表示方式。

    1. JSON - 轻量级的数据交换格式

    基本介绍

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。

    Python操作JSON

    import json
    
    # Python对象转JSONphp字符串
    data = {"name": "张三", "age": 25, "is_student": True}
    json_str = json.dumps(data, ensure_ascii=False)  # ensure_ascii=False支持中文
    print(json_str)  # 输出: {"name": "张三", "age": 25, "is_student": true}
    
    # JSON字符串转Python对象
    python_obj = json.loads(json_str)
    print(python_obj["name"])  # 输出: 张三
    
    # 读python写JSON文件
    with open('data.json', 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False)
    
    with open('data.json', 'r', encoding='utf-8') as f:
        loaded_data = json.load(f)
    

    适用场景

    Web API数据传输

    配置文件存储

    不同语言系统间的数据交换

    2. CSV - 表格数据的最佳选择

    基本介绍

    CSV(Comma-Separated Values)是以纯文本形式存储表格数据的常用格式。

    Python操作CSV

    import csv
    
    # 写入CSV文件
    data = [
        ['姓名', '年龄', '城市'],
        ['张三', '25', '北京'],
        ['李四', '30', '上海']
    ]
    
    with open('data.csv', 'w', newline='', encoding='utf-8') as f:
        writer = csv.writer(f)
        writer.writerows(data)
    
    # 读取CSV文件
    with open('data.csv', 'r', encoding='utf-8') as f:
        reader = csv.reader(f)
        for row in reader:
            print(row)
    
    # 使用DictReader更友好
    with open('data.csv', 'r', encoding='utf-8') as f:
        reader = csv.DictReader(f)
        for row in reader:
            print(row['姓名'], row['年龄'])
    

    适用场景

    电子表格数据导出/导入

    数据分析的原始数据存储

    数据库表数据备份

    3. XML - 结构化文档的标准

    基本介绍

    XML(eXtensible Markup Language)是一种标记语言,用于存储和传输结构化数据。

    Python操作XML

    import xml.etree.ElementTree as ET
    
    # 创建XML
    root = ET.Element("catalog")
    book1 = ET.SubElement(root, "book", id="1")
    ET.SubElement(book1, "title").text = "Python编程"
    ET.SubElement(book1, "author").text = "张三"
    ET.SubElement(book1, "price").text = "59.00"
    
    tree = ET.ElementTree(root)
    tree.write("books.xml", encoding="utf-8", xml_declaration=True)
    
    # 解析XML
    tree = ET.parse("books.xml")
    root = tree.getroot()
    
    for book in root.findall("book"):
        title = book.find("title").text
        price = book.find("price").text
        print(f"书名: {title}, 价格: {price}")
    

    适用场景

    配置文件(如android的布局文件)

    Web服务(如SOAP协议)

    文档结构存储(如Office文档格式)

    4. YAML - 人性化的配置文件格式

    基本介绍

    YAML(YAML Ain’t Markup Language)是一种人性化的数据序列化标准,比JSON更易读。

    Python操作YAML

    import yaml
    
    # 写入YAML文件
    data = {
        'name': '张三',
        'age': 25,
        'skills': ['Python', 'Java', 'SQL'],
        'address': {
            'city': '北京',
            'postcode': '100000'
        }
    }
    
    with open('data.yaml', 'w', encoding='utf-8') as f:
        yaml.dump(data, f, allow_unicode=True)
    
    # 读取YAML文件
    with open('data.yaml', 'r', encoding='utf-8') as f:
        loaded_data = yaml.safe_load(f)
        print(loaded_data['name'])
    

    适用场景

    应用程序配置文件

    持续集成/部署配置(如GitLab CI)

    复杂数据结构的序列化

    5. Pickle - Python对象的二进制序列化

    基本介绍

    Pickle是Python特有的数据序列化格式,可以将任意Python对象转换为二进制格式。

    Python操作Pickle

    import pickle
    
    # 序列化对象
    data = {'a': [1, 2, 3], 'b': ('string', '另一个字符串'), 'c': None}
    with open('data.pkl', 'wb') as f:
        pickle.dump(data, f)
    
    # 反序列化
    with open('data.pkl', 'rb')编程 as f:
        loaded_data = pickle.load(f)
        print(loaded_data)
    

    注意事项

    安全性:不要反序列化不受信任的来源的数据

    兼容性:不同Python版本间的Pickle文件可能不兼容

    适用场景

    Python对象的本地持久化

    机器学习模型的保存

    进程间通信

    6. Parquet - 高效的大数据列式存储

    基本介绍

    Parquet是一种列式存储格式,特别适合大数据处理和分析。

    Python操作Parquet

    import pandas as pd
    import pyarrow.parquet as pq
    
    # 创建示例DataFrame
    df = pd.DataFrame({
        'name': ['张三', '李四', '王五'],
        'age': [25, 30, 35],
        'city': ['北京', '上海', '广州']
    })
    
    # 写入Parquet文件
    df.to_parquet('data.parquet')
    
    # 读取Parquet文件
    df_read = pd.read_parquet('data.parquet')
    print(df_read.head())
    

    适用场景

    大数据分析

    数据仓库存储

    需要高效查询的大型数据集

    7. Protocol Buffers - 高效的二进制序列化格式

    基本介绍

    Protocol Buffers(protobuf)是Google开发的高效二进制序列化格式。

    Python使用示例

    先定义.proto文件:

    syntax = "proto3";
    
    message Person {
        string name = 1;
        int32 age = 2;
        repeated string emails = 3;
    }
    

    使用protoc编译:

    protoc --python_out=. person.proto
    

    Python中使用:

    import person_pb2
    
    # 创建并序列化
    person = person_pb2.Person()
    person.name = "张三"
    person.age = 25
    person.emails.append("zhangsan@example.com")
    
    serialized = person.Seriawww.devze.comlizeToString()
    
    # 反序列化
    new_person = person_pb2.Person()
    new_person.ParseFromString(serialized)
    print(new_person.name)
    

    适用场景

    高性能网络通信

    微服务间数据传输

    需要版本兼容的数据存储

    数据格式对比与选择建议

    一文带你玩转Python必备的几种数据格式

    选择建议:

    需要人类可读的配置:YAML > JSON > XML

    Web API交互:JSON

    大数据分析:Parquet

    Python对象持久化:Pickle

    高性能网络通信:Protobuf

    简单表格数据:CSV

    格式转换技巧

    JSON转CSV

    import json
    import csv
    
    with oMqiAhSRPpen('data.json', 'r', encoding='utf-8') as f:
        data = json.load(f)
    
    # 假设data是列表形式的JSON
    with open('output.csv', 'w', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=data[0].keys())
        writer.writeheader()
        writer.writerows(data)
    

    CSV转JSON

    import csv
    import json
    
    with open('data.csv', 'r', encoding='utf-8') as f:
        reader = csv.DictReader(f)
        data = [row for row in reader]
    
    with open('output.json', 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=2)
    

    Pandas多格式转换

    import pandas as pd
    
    # 读取各种格式
    df_json = pd.read_json('data.json')
    df_csv = pd.read_csv('data.csv')
    df_parquet = pd.read_parquet('data.parquet')
    
    # 写入各种格式
    df.to_json('output.json', orient='records', force_ascii=False)
    df.to_csv('output.csv', index=False)
    df.to_parquet('output.parquet')
    

    结语

    掌握Python中各种数据格式的特点和用法,能够让你在开发过程中根据具体需求选择最合适的工具。无论是简单的配置文件,还是复杂的大数据处理,Python生态都提供了完善的解决方案。

    在实际项目中,往往需要根据性能要求、可读性需求、团队习惯等因素综合考虑选择哪种数据格式。建议多实践、多比较,积累经验后自然能够做出最佳选择。

    到此这篇关于一文带你玩转Python必备的几种数据格式的文章就介绍到这了,更多相关Python数据格式内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜