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

 更新时间:2025年06月30日 08:35:51   作者:Python_trys  
在Python开发中,数据格式的选择直接影响着程序的性能和可维护性,本文将详细介绍Python开发中最常用的几种数据格式,希望可以帮助大家选择最合适的数据表示方式

前言

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

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

基本介绍

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

Python操作JSON

import json

# Python对象转JSON字符串
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"])  # 输出: 张三

# 读写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.SerializeToString()

# 反序列化
new_person = person_pb2.Person()
new_person.ParseFromString(serialized)
print(new_person.name)

适用场景

高性能网络通信

微服务间数据传输

需要版本兼容的数据存储

数据格式对比与选择建议

选择建议:

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

Web API交互:JSON

大数据分析:Parquet

Python对象持久化:Pickle

高性能网络通信:Protobuf

简单表格数据:CSV

格式转换技巧

JSON转CSV

import json
import csv

with open('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数据格式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Windows下PyCharm安装Numpy包及无法安装问题解决方案

    详解Windows下PyCharm安装Numpy包及无法安装问题解决方案

    这篇文章主要介绍了详解Windows下PyCharm安装Numpy包及无法安装问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • python图形用户界面tkinter之按钮Button的使用说明

    python图形用户界面tkinter之按钮Button的使用说明

    这篇文章主要介绍了python图形用户界面tkinter之按钮Button的使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Python fileinput模块使用实例

    Python fileinput模块使用实例

    这篇文章主要介绍了Python fileinput模块使用实例,fileinput模块可以遍历文本文件的所有行,本文就给出它的使用代码实例,需要的朋友可以参考下
    2015-05-05
  • python中rc1什么意思

    python中rc1什么意思

    在本篇文章里小编给大家整理了关于python中rc1的基础知识点内容,需要的朋友们可以学习下。
    2020-06-06
  • M1 mac安装PyTorch的实现步骤

    M1 mac安装PyTorch的实现步骤

    本文将介绍如何在M1机器上本地安装和运行PyTorch。你使用的M1机型(Air、Pro、Mini或iMac)没有区别。感兴趣的可以了解一下
    2021-08-08
  • python爬取各类文档方法归类汇总

    python爬取各类文档方法归类汇总

    网络爬虫不仅需要能够抓取HTML中的敏感信息,也需要有抓取其他类型文档的能力这篇文章主要为大家汇总了python爬取各类文档方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Python Handler处理器和自定义Opener原理详解

    Python Handler处理器和自定义Opener原理详解

    这篇文章主要介绍了Python Handler处理器和自定义Opener原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Python使用Matplotlib和Seaborn进行数据可视化分析

    Python使用Matplotlib和Seaborn进行数据可视化分析

    Python作为数据科学领域的明星语言,拥有强大且丰富的可视化库,其中最著名的莫过于 Matplotlib 和 Seaborn,下面我们来看看如何使用Matplotlib和Seaborn绘制常用图表并掌握一些基本的图表定制技巧吧
    2025-12-12
  • python中的opencv 图像梯度

    python中的opencv 图像梯度

    这篇文章主要介绍了python中的opencv 图像梯度,图像梯度计算的是图像变化的速度,图像梯度计算需要求导数,但是图像梯度一般通过计算像素值的差来得到梯度的近似值,下文详细介绍需要的小伙伴可以参考一下
    2022-06-06
  • python3 assert 断言的使用详解 (区别于python2)

    python3 assert 断言的使用详解 (区别于python2)

    今天小编就为大家分享一篇python3 assert 断言的使用详解 (区别于python2),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11

最新评论