1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 使用python开发json csv数据格式转换工具

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

时间:2019-06-22 20:01:01

相关推荐

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

使用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或unicodeloads(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, getoptimport csvimport jsonfrom ast import literal_evaldef main(argv):pretty = Falsetry: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 = Truedata = 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:passfinally:return sourcewith open(file) as csvfile:reader = csv.DictReader(csvfile)title = reader.fieldnamesfor 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_rowsdef 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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。