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

作者:

文章目录
  • 在Python开发中,数据格式的选择直接影响着程序的性能和可维护性。不同的数据格式有着各自的特点和适用场景。本文将详细介绍Python开发中最常用的几种数据格式,包括它们的特性、使用场景以及相互转换方法,帮助你根据实际需求选择最合适的数据表示方式。
  • 基本介绍 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数据传输 配置文件存储 不同语言系统间的数据交换
  • 基本介绍 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[‘年龄’]) 适用场景 电子表格数据导出/导入 数据分析的原始数据存储 数据库表数据备份
  • 基本介绍 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文档格式)
  • 基本介绍 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) 复杂数据结构的序列化
  • 基本介绍 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对象的本地持久化 机器学习模型的保存 进程间通信
  • 基本介绍 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()) 适用场景 大数据分析 数据仓库存储 需要高效查询的大型数据集
  • 基本介绍 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
  • 掌握Python中各种数据格式的特点和用法,能够让你在开发过程中根据具体需求选择最合适的工具。无论是简单的配置文件,还是复杂的大数据处理,Python生态都提供了完善的解决方案。 在实际项目中,往往需要根据性能要求、可读性需求、团队习惯等因素综合考虑选择哪种数据格式。建议多实践、多比较,积累经验后自然能够做出最佳选择。 到此这篇关于一文带你玩转Python必备的几种数据格式的文章就介绍到这了,更多相关Python数据格式内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python中常用文本数据格式转换 python中JSON数据格式的详细使用教程 Python实现常见数据格式转换的方法详解 Python文件操作和数据格式详解(简单简洁) python实现一组典型数据格式转换 在Python的struct模块中进行数据格式转换的方法
  • 目录
    • 前言
    • 1. JSON – 轻量级的数据交换格式
    • 2. CSV – 表格数据的最佳选择
    • 3. XML – 结构化文档的标准
    • 4. YAML – 人性化的配置文件格式
    • 5. Pickle – Python对象的二进制序列化
    • 6. Parquet – 高效的大数据列式存储
    • 7. Protocol Buffers – 高效的二进制序列化格式
    • 数据格式对比与选择建议
    • 格式转换技巧
      • JSON转CSV
      • CSV转JSON
      • Pandas多格式转换
    • 结语

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

      基本介绍

      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数据传输

      配置文件存储

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

      基本介绍

      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['年龄'])
      

      适用场景

      电子表格数据导出/导入

      数据分析的原始数据存储

      数据库表数据备份

      基本介绍

      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文档格式)

      基本介绍

      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)

      复杂数据结构的序列化

      基本介绍

      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对象的本地持久化

      机器学习模型的保存

      进程间通信

      基本介绍

      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())
      

      适用场景

      大数据分析

      数据仓库存储

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

      基本介绍

      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

      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)
      

      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)
      

      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数据格式内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

      您可能感兴趣的文章:

      • Python中常用文本数据格式转换
      • python中JSON数据格式的详细使用教程
      • Python实现常见数据格式转换的方法详解
      • Python文件操作和数据格式详解(简单简洁)
      • python实现一组典型数据格式转换
      • 在Python的struct模块中进行数据格式转换的方法

      站内搜索