使用python开发json、csv数据格式转换工具

2023-05-16

使用python开发json、csv数据格式转换工具

  • json和xml是业界常用的数据格式,而游戏行业经常使用csv配表,包括本地化文本和数值。本文介绍csv和json序列化、逆序列化相关的python库,以及开发工具常用的命令行解析库--getopt

csv模块

  • csv文件格式并不统一,存在多种分隔符,而csv模块可以很方便的读写csv文件
  • csv.reader
    • 返回一个reader迭代器,迭代器每次给出一个字符串列表,对应于csv文件中的一行
  • csv.writer
    • 相应的,返回一个writer,调用writerrow([stra,strb,...strc])可以将数据写入文件
  • csv.DictReader
    • 创建一个DictReader类,对比reader迭代器,每次迭代给出一个字典对应一行,参数Reader.fieldnames给出了字典的key
  • csv.DictWriter
    • 类似writer,但输出的是字典

json模块

  • dump(obj, fp)将对象序列化后写入文件fp,indent选项可格式化json文件
  • dumps(obj)返回obj序列化之后的字符串
  • load(fp)从文件对象fp中反序列化,支持str或unicode
  • loads(s)从字符串中反序列化

getopt解析命令行

  • getopt模块在c语言中也有,python实现了同样功能的模块
  • 与sys模块配合,获取命令行参数
    • sys.argv为命令行列表
    • sys.argv[1:]可传递给getopt使用,去除了第一个参数(脚本名)
  • getopt.getopt(sys,argv[1:], options[, long_options])
    • options为短选项,例如hi:,表示可以-h或者-i xxx的方式使用,:表示该选项必须附加参数
    • long_options为长选项,例如['help', 'input='],可以--help或者--input xxx的格式使用,=表示该选项必须附加参数
    • 第一个返回值为(option, value)的pair列表,第二个返回值为解析后剩余的参数
    • 例如命令行参数为-h -i xxx yyy,则返回值为[('-h', ''), ('-i', xxx)], ['yyy']
    • 获得pair列表后,根据其中的数据进行不同的操作

csv转换为json文件工具举例

  • 下面为csv文件转换为json的样例代码,以csv第一列作为json dict的key

    import sys, getopt
    import csv
    import json
    from ast import literal_eval
    
    def main(argv):
        pretty = False
        try:
            opts, args = getopt.getopt(argv,"hp")
        except getopt.GetoptError:
            print 'test.py [-p]'
            sys.exit(2)
        for opt, arg in opts:
            if opt == '-h':
                print 'test.py [-p]'
                sys.exit()
            elif opt == '-p':
                pretty = True
    
        data = read_csv("test.csv")
        #print(json.dumps(data, sort_keys=False, indent=4, separators=(',', ': '),encoding="utf-8",ensure_ascii=False))
        write_json(data, "test.json", pretty)
    
    
    def read_csv(file):
        csv_rows = {}
    
        def format(source):
            try:
                source = literal_eval(source)
            except:
                pass
            finally:
                return source
    
        with open(file) as csvfile:
            reader = csv.DictReader(csvfile)
            title = reader.fieldnames
            for row in reader:
                csv_rows[format(row[title[0]])] = {title[i]:format(row[title[i]]) for i in range(len(title)) if not title[i].startswith('_')}
    
        return csv_rows
    
    
    def write_json(data, json_file, format = True):
        with open(json_file, "w") as f:
            if format:
                f.write(json.dumps(data, sort_keys=False, indent=4, separators=(',', ': '),encoding="utf-8",ensure_ascii=False))
            else:
                f.write(json.dumps(data))
    
    if __name__ == "__main__":
        main(sys.argv[1:])
    

作者Focustc,来自于 CSDN
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用python开发json、csv数据格式转换工具 的相关文章

随机推荐

  • 你在编程过程中养成了哪些好习惯?

    写工作日志 我一直有大量写笔记的习惯 编程的时候 xff0c 也经常遇到一些麻烦的问题 xff0c 思路转瞬即逝 xff0c 于是把所有这些思路记录下来 xff0c 会在以后的搜索中成为重要的灵感来源 我的工作日志里通常以项目为单位 xff
  • 如何让 PPT 中的表格更美观?

    这个不难 xff0c 不信你看 做PPT表格 xff0c 千万不要直接把Excel截个图粘贴到PPT里 或者网上找到相应的表格图片 xff0c 也直接粘贴到PPT中 这样做的PPT表格肯定不好看呀 今天和大家分享几个表格美化的小技巧 xff
  • 这次把怎么做好一个PPT讲清-演讲篇

    商务演讲与汇报 一 目标 xff1a 演讲必须有清晰的目标 演讲 xff1a 影响他人发生积极的 改变 注意 xff0c 目标就要设定的影响听众在听完你的演讲后发生积极的改变 xff1b 例 xff1a 5月初向领导做月度工作汇报 让领导在
  • 这次把怎么做好一个PPT讲清-动画篇

    干货预警 xff01 作为一位PPT发烧友看过诸多PPT案例 xff0c 分享几个高大上的动画效果 文末有福利 xff01 废话不多说 xff0c 直接上重点 xff0c 本文主要讲八个动画技巧 xff0c 我们来看先目录 xff1a 收藏
  • 重新认知发明,全网保姆级入门说明

    已剪辑自 https mp weixin qq com s IDQXYXpWQlaW1NyX36H2vQ 关注 林外的日课 公众号 xff1a 每日思考 xff0c 每周更新 发明 xff0c 是指对产品 方法或者其改进所提出的新的技术方案
  • 软件测试需要掌握哪些技术?

    文章目录 1 黑盒测试 白盒测试 灰盒测试1 1 黑盒测试1 2 白盒测试1 3 灰盒测试 2 自顶向下集成和自底向上集成各自的优缺点 2 1 自顶向下集成2 2 自底向上集成 3 按照开发阶段划分 xff0c 软件测试可以分为哪几个流程
  • 画时序图的四个好用的工具~

    已剪辑自 https mp weixin qq com s xvCOLaGARp15vCRq6w8h2Q 分享几个画时序图的软件 xff0c 一些通信协议 xff0c 如I2C SPI UART MIPI等 xff0c 都会涉及到时序 Ti
  • Google软件工程:什么是软件工程

    文章目录 编程 软件工程软件工程的3个特性时间与变化海勒姆定律 xff08 Hyrum s Law xff09 目标不是 没有变化 规模和效率左移思维 权衡和成本最后 已剪辑自 https mp weixin qq com s GhYfH3
  • 多普勒失真信号重采样的Matlab仿真分析

    多普勒失真信号重采样的Matlab仿真分析 应用场景 水声通信指的是使用声信号在水中传输数据 相对而言 xff0c 电磁信号在水中吸收严重衰减过快 xff0c 光信号受水中悬浮颗粒的影响 xff0c 也无法完成远距离传输 这两种信号的传播距
  • 嵌入式为何钟爱SourceInsight,主要因为这个功能~

    已剪辑自 https mp weixin qq com s F gafwbZswpnY8EaCz8HxQ 不管是玩单片机还是嵌入式linux xff0c 只要是与硬件结合比较紧密的部分目前基本上还是C语言 xff0c 当然了 xff0c 不
  • 华科师兄最近的六条感悟

    已剪辑自 https mp weixin qq com s P6vz2zDTnCNli0GdyKX98Q 孤独之前是迷茫 孤独之后便是成长 曾经我是一个无法承受孤独的人 xff0c 无法和自己独处 xff0c 喜欢喧嚣的感觉 慢慢我发现这种
  • 一个优秀的程序员应该养成哪些好的习惯?

    文章目录 一 写代码前先想好思路 xff0c 先规划框架 xff0c 再到局部实现二 注重代码风格三 注重代码执行效率四 掌握一些编码原则五 解决问题时 xff0c 对于原理性的问题 xff0c 不要面向搜索引擎编程 六 注重基础知识的学习
  • 嵌入式开发中的防御性C语言编程

    嵌入式产品的可靠性自然与硬件密不可分 xff0c 但在硬件确定 并且没有第三方测试的前提下 xff0c 使用防御性编程思想写出的代码 xff0c 往往具有更高的稳定性 防御性编程首先需要认清C语言的种种缺陷和陷阱 xff0c C语言对于运行
  • PPT 最后一页写什么结束语既得体又能瞬间提升格调?

    谢邀 xff01 我只分享一个现下最流行的方法 xff0c 绝对让尾页逼格满满 xff01 罗永浩雷军都在用的 金句法 提到这份方法 xff0c 你可能会觉得很陌生 xff0c 但你一定见过这样的页面 xff1a 这样的页面还有很多 xff
  • Qt控件和事件

    文章目录 什么是 Qt 控件什么是Qt事件总结 已剪辑自 http c biancheng net view vip 9651 html Qt 是一个著名的 GUI 框架 xff0c 用来开发和用户交互的图形界面 作为 GUI 框架 xff
  • Qt信号和槽机制详解

    文章目录 信号和槽connect 函数实现信号和槽实例演示信号和槽机制 已剪辑自 http c biancheng net view vip 9652 html 信号和槽是 Qt 特有的消息传输机制 xff0c 它能将相互独立的控件关联起来
  • Qt QLabel文本框的使用

    文章目录 QLabel文本框的使用QLabel文本框的信号和槽实例演示QLabel文本框的用法 已剪辑自 http c biancheng net view vip 9653 html QLabel 是 Qt 帮我们写好的一个控件类 xff
  • Qt QPushButton按钮用法详解

    文章目录 QPushButton按钮的创建QPushButton按钮的使用QPushButton按钮的信号和槽实例演示QPushButton按钮用法 已剪辑自 http c biancheng net view vip 9654 html
  • Qt QLineEdit单行输入框用法详解

    已剪辑自 http c biancheng net view vip 9655 html QLineEdit 是 Qt 提供的一个控件类 xff0c 它直接继承自 QWdiget 类 xff0c 专门用来创建单行输入框 xff0c 如下图所
  • 使用python开发json、csv数据格式转换工具

    使用python开发json csv数据格式转换工具 json和xml是业界常用的数据格式 xff0c 而游戏行业经常使用csv配表 xff0c 包括本地化文本和数值 本文介绍csv和json序列化 逆序列化相关的python库 xff0c