使用python开发json、csv数据格式转换工具
2016-05-26 11:57
1291 查看
使用python开发json、csv数据格式转换工具
json和xml是业界常用的数据格式,而游戏行业经常使用csv配表,包括本地化文本和数值。本文介绍csv和json序列化、逆序列化相关的python库,以及开发工具常用的命令行解析库--getoptcsv模块
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的keyimport 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
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- mysql load data 导出、导入 csv
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- 我是运营,我没有假期
- Python将excel导入到mysql中
- 使用 Python 处理 JSON 格式的数据
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定