前言
在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数据格式内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论