编程进阶网 编程进阶网
首页
  • 在线工具
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 加解密
  • 时间日期
  • 网络工具
  • 颜色设计
  • 二维码
  • 开发实用
  • 计算机组成原理
  • 操作系统原理
  • 网络协议原理
  • 数据库系统原理
  • 序卷导读
  • 数据本质
  • 运行模型
  • 并发设计
  • 内存真相
  • 交互系统
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 体系建设
  • 代码品质
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 性能优化
  • 数据结构导论
  • 线性结构详解
  • 树哈希结构论
  • 容器设计实战
  • 经典算法思想
  • 工程案例剖析
  • 算法题库精练
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++编程技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript案例
  • JavaScript高级
  • Android库解读
  • Android专栏
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • 毛选解读
  • 自我精进
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 在线工具
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 加解密
  • 时间日期
  • 网络工具
  • 颜色设计
  • 二维码
  • 开发实用
  • 计算机组成原理
  • 操作系统原理
  • 网络协议原理
  • 数据库系统原理
  • 序卷导读
  • 数据本质
  • 运行模型
  • 并发设计
  • 内存真相
  • 交互系统
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 体系建设
  • 代码品质
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 性能优化
  • 数据结构导论
  • 线性结构详解
  • 树哈希结构论
  • 容器设计实战
  • 经典算法思想
  • 工程案例剖析
  • 算法题库精练
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++编程技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript案例
  • JavaScript高级
  • Android库解读
  • Android专栏
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • 毛选解读
  • 自我精进
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • ScriptHub 脚本工具箱
  • Python

  • Shell-Bash

  • 工具脚本

    • 工具脚本速查
    • 哈希校验
    • Base64编码
    • AES加解密
    • RSA签名验签
    • JWT令牌
    • JSON与YAML
    • XML与CSV
      • 一、Python XML 处理
        • 1.1 xml.etree——标准库解析
        • 1.2 xmltodict——XML↔字典(更像 JSON)
      • 二、Python CSV 处理
        • 2.1 基础读写
        • 2.2 DictReader / DictWriter
        • 2.3 大文件流式处理
      • 三、实战:格式互转工具
    • 编码转义
    • 图片转换
    • 文档转换
    • 批量重命名
    • 分割合并
    • 目录同步
    • 文件监控
    • 压缩归档
    • 文件去重
    • cURL速查
    • HTTP调试
    • 端口DNS
    • 抓包代理
  • 自动化脚本

  • ScriptHub
  • 工具脚本
杨充
2018-03-29
目录

XML与CSV

# XML与CSV

XML 解析/转字典、CSV 读写/行列转置、XML↔JSON 互转、大文件流式处理。

# 一、Python XML 处理

# 1.1 xml.etree——标准库解析

#!/usr/bin/env python3
"""XML 解析——标准库,无需安装"""
import xml.etree.ElementTree as ET

xml_str = """<?xml version="1.0"?>
<users>
  <user id="1">
    <name>Alice</name><email>alice@example.com</email>
  </user>
  <user id="2">
    <name>Bob</name><email>bob@example.com</email>
  </user>
</users>"""

# ---- 解析 ----
root = ET.fromstring(xml_str)
for user in root.findall('user'):
    uid = user.get('id')
    name = user.find('name').text
    email = user.find('email').text
    print(f"User {uid}: {name} <{email}>")

# ---- 构建 XML ----
new_root = ET.Element('users')
user = ET.SubElement(new_root, 'user', id='3')
ET.SubElement(user, 'name').text = 'Charlie'
tree = ET.ElementTree(new_root)
tree.write('output.xml', encoding='utf-8', xml_declaration=True)

# 1.2 xmltodict——XML↔字典(更像 JSON)

pip install xmltodict
#!/usr/bin/env python3
import xmltodict, json

xml_str = "<user><name>Alice</name><age>30</age></user>"

# ---- XML → 字典 ----
data = xmltodict.parse(xml_str)
print(data)  # {'user': {'name': 'Alice', 'age': '30'}}

# ---- 字典 → XML ----
new_xml = xmltodict.unparse({'root': {'item': [{'@id': '1'}, {'@id': '2'}]}},
                             pretty=True)
print(new_xml)

# ---- XML → JSON(两步)----
d = xmltodict.parse(xml_str)
json_str = json.dumps(d, indent=2, ensure_ascii=False)
print(json_str)

# 二、Python CSV 处理

# 2.1 基础读写

#!/usr/bin/env python3
import csv

# ---- 写入 CSV ----
with open('users.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['ID', 'Name', 'Email'])
    writer.writerows([
        [1, 'Alice', 'alice@mail.com'],
        [2, 'Bob', 'bob@mail.com'],
    ])

# ---- 读取 CSV ----
with open('users.csv', newline='') as f:
    reader = csv.reader(f)
    header = next(reader)
    for row in reader:
        print(dict(zip(header, row)))  # 转为字典

# 2.2 DictReader / DictWriter

#!/usr/bin/env python3
import csv

# ---- DictWriter——用字典写 ----
with open('users.csv', 'w', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=['name', 'age', 'city'])
    writer.writeheader()
    writer.writerows([
        {'name': 'Alice', 'age': 30, 'city': 'Beijing'},
        {'name': 'Bob', 'age': 25, 'city': 'Shanghai'},
    ])

# ---- DictReader——读成字典列表 ----
with open('users.csv', newline='') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(f"{row['name']}, {row['age']}, {row['city']}")

# ---- CSV → JSON ----
with open('users.csv', newline='') as f:
    data = list(csv.DictReader(f))
with open('users.json', 'w') as f:
    json.dump(data, f, indent=2, ensure_ascii=False)

# 2.3 大文件流式处理

#!/usr/bin/env python3
"""CSV 大文件逐行处理——不占内存"""
import csv

def filter_large_csv(input_path, output_path, min_age=18):
    """流式过滤——百万行无压力"""
    with open(input_path) as fin, open(output_path, 'w', newline='') as fout:
        reader = csv.DictReader(fin)
        writer = csv.DictWriter(fout, fieldnames=reader.fieldnames)
        writer.writeheader()
        for row in reader:
            if int(row.get('age', 0)) >= min_age:
                writer.writerow(row)

# 三、实战:格式互转工具

#!/usr/bin/env python3
"""XML/CSV/JSON 三向互转
用法: python convert.py data.xml data.json
"""
import sys, json, csv, xmltodict

def convert(input_path, output_path):
    with open(input_path) as f:
        in_ext = input_path.rsplit('.', 1)[-1]
        if in_ext == 'json':  data = json.load(f)
        elif in_ext == 'csv': data = list(csv.DictReader(f))
        elif in_ext == 'xml': data = xmltodict.parse(f.read())

    with open(output_path, 'w', newline='') as f:
        out_ext = output_path.rsplit('.', 1)[-1]
        if out_ext == 'json':
            json.dump(data, f, indent=2, ensure_ascii=False)
        elif out_ext == 'csv' and isinstance(data, list):
            w = csv.DictWriter(f, fieldnames=data[0].keys())
            w.writeheader(); w.writerows(data)
        elif out_ext == 'xml':
            f.write(xmltodict.unparse(data if isinstance(data, dict)
                                       else {'root': {'item': data}}, pretty=True))
    print(f"✅ {input_path} → {output_path}")

if __name__ == '__main__':
    convert(sys.argv[1], sys.argv[2])
#工具#格式
上次更新: 2026/06/28, 17:55:19
JSON与YAML
编码转义

← JSON与YAML 编码转义→

最近更新
01
科学方法实践论法
06-28
02
辩证思维矛盾论法
06-28
03
毛选中的调查观念
06-28
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 鄂ICP备2024073355号-1 | 鄂ICP备2024073355号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式