包含编程籽料、学习路线图、爬虫代码、安装包等!【点击领取】
前言
在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所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习