一文秒懂python读写csv xml json文件各种骚操作


Posted in Python onJuly 04, 2019

Python优越的灵活性和易用性使其成为最受欢迎的编程语言之一,尤其是对数据科学家而言。 这在很大程度上是因为使用Python处理大型数据集是很简单的一件事情。

如今,每家科技公司都在制定数据战略。 他们都意识到,拥有正确的数据(干净、尽可能多)会给他们带来关键的竞争优势。 数据,如果使用有效,可以提供深层次的、隐藏在表象之下的信息。

多年来,数据存储的可能格式显著增加,但是,在日常使用中,还是以 CSV 、 JSON 和 XML 占主导地位。 在本文中,我将与你分享在Python中使用这三种流行数据格式及其之间相互转换的最简单方法!

CSV 数据

CSV文件是存储数据的最常见方式,你会发现,Kaggle竞赛中的大多数数据都是以这种方式存储的。 我们可以使用Python内置的csv库读写CSV文件,通常,我们将数据读入一个列表中,列表中每个元素又是一个列表,代表一行数据。

观察下面的代码,当我们运行 csv.reader() 时,就可以访问到我们指定的CSV数据文件。 而 csvreader.next() 函数的作用是从CSV中读取一行,每次调用它,它都会移动到下一行。 我们还可以通过 for row in csvreader 使用for循环遍历csv的每一行。 另外,最好确保每一行的列数相同,否则,在处理列表时可能会遇到一些错误。

import csv filename = "my_data.csv" fields = [] rows = [] # 读取csv文件 with open(filename, 'r') as csvfile: # 创建一个csv reader对象 csvreader = csv.reader(csvfile) # 从文件中第一行中读取属性名称信息 # fields = next(csvreader) python3.2 以上的版本使用 fields = csvreader.next() # 接着一行一行读取数据 for row in csvreader: rows.append(row) # 打印前5行信息 for row in rows[:5]: print(row)

在Python将数据写入CSV也很容易,在一个单独的列表中设置属性名称,并将要写入的数据存储在一个列表中。 这一次,我们将创建一个 writer() 对象,并使用它将数据写入文件,这与我们读取数据的方式非常相似。

import csv # 属性名称 fields = ['Name', 'Goals', 'Assists', 'Shots'] # csv文件中每一行的数据,一行为一个列表 rows = [ ['Emily', '12', '18', '112'], ['Katie', '8', '24', '96'], ['John', '16', '9', '101'], ['Mike', '3', '14', '82']] filename = "soccer.csv" # 将数据写入到csv文件中 with open(filename, 'w+') as csvfile: # 创建一个csv writer对象 csvwriter = csv.writer(csvfile) # 写入属性名称 csvwriter.writerow(fields) # 写入数据 csvwriter.writerows(rows)

当然,使用强大的pandas库将会使处理数据变得容易很多,从CSV读取和写入文件都只需要一行代码!

import pandas as pd filename = "my_data.csv" # 读取csv文件数据 data = pd.read_csv(filename) # 打印前5行 print(data.head(5)) # 将数据写入到csv文件中 data.to_csv("new_data.csv", sep=",", index=False)

我们甚至可以使用pandas通过一行代码快速将CSV转换为字典列表。 转换为字典列表之后,我们可以使用 dicttoxml 库将其转换为XML格式,我们还可以将它保存为JSON文件!

import pandas as pd from dicttoxml import dicttoxml import json # 创建一个DataFrame data = {'Name': ['Emily', 'Katie', 'John', 'Mike'], 'Goals': [12, 8, 16, 3], 'Assists': [18, 24, 9, 14], 'Shots': [112, 96, 101, 82] } df = pd.DataFrame(data, columns=data.keys()) # 将DataFrame转化为一个字典并且将它存储到json文件中 data_dict = df.to_dict(orient="records") with open('output.json', "w+") as f: json.dump(data_dict, f, indent=4) # 将DataFrame转化为一个字典并且将它存储到xml文件中 xml_data = dicttoxml(data_dict).decode() with open("output.xml", "w+") as f: f.write(xml_data)

JSON数据

JSON提供了一种干净且易于阅读的格式,因为它维护了一个字典风格的结构。 就像CSV一样,Python有一个内置的json模块,使读写变得超级容易! 从上面的例子可以看到当我们读取CSV时,可以将数据以字典的形式存储,然后再将字典写入文件。

import json import pandas as pd # 使用json模块从json文件中读取数据 # 以字典形式存储 with open('data.json') as f: data_listofdict = json.load(f) # 也可以直接使用pandas直接读取json文件 data_df = pd.read_json('data.json', orient='records') # 将字典数据保存为json文件 # 并使用 'indent' and 'sort_keys' 格式化json文件 with open('new_data.json', 'w+') as json_file: json.dump(data_listofdict, json_file, indent=4, sort_keys=True) # 也可以使用pandas将字典结构的数据保存为json文件 export = data_df.to_json('new_data.json', orient='records')

正如我们之前看到的,我们可以通过pandas或者使用Python的内置csv模块轻松地将我们的数据存储为CSV文件,而在转化为成XML时,我们使用的是 dicttoxml 库。

import json import pandas as pd import csv # 从json文件中读取数据 # 数据存储在一个字典列表中 with open('data.json') as f: data_listofdict = json.load(f) # 以列表中的字典写入倒csv文件中 keys = data_listofdict[0].keys() with open('saved_data.csv', 'w') as output_file: dict_writer = csv.DictWriter(output_file, keys) dict_writer.writeheader() dict_writer.writerows(data_listofdict)

XML数据

XML有点不同于CSV和JSON。 通常,CSV和JSON由于其简单性而被广泛使用。 它们读、写和解释起来既简单又快捷,不需要额外的工作,而且解析JSON或CSV是非常轻量级的。

另一方面,XML往往数据量要大一些。 你如果正在发送更多的数据,这意味着你需要更多的带宽、更多的存储空间和更多的运行时间。 但是与JSON和CSV相比,XML确实具有一些额外的特性: 你可以使用名称空间来构建和共享标准结构、更好的继承表示,以及用XML schema、DTD等表示数据的行业标准化方法。

要读取XML数据,我们将使用Python内置的XML模块的子模块ElementTree。 这里,我们可以使用 xmltodict 库将ElementTree对象转换为字典。 一旦有了字典,我们就可以像上面一样将字典换转换为CSV、JSON或pandas的 DataFrame !

import xml.etree.ElementTree as ET import xmltodict import json tree = ET.parse('output.xml') xml_data = tree.getroot() xmlstr = ET.tostring(xml_data, encoding='utf8', method='xml') data_dict = dict(xmltodict.parse(xmlstr)) print(data_dict) with open('new_data_2.json', 'w+') as json_file: json.dump(data_dict, json_file, indent=4, sort_keys=True)

总结

以上所述是小编给大家介绍的一文综述python读写csv xml json文件各种骚操作,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python的__builtin__模块中的一些要点知识
May 02 Python
在Django中创建URLconf相关的通用视图的方法
Jul 20 Python
Python利用Beautiful Soup模块创建对象详解
Mar 27 Python
python中aioysql(异步操作MySQL)的方法
Apr 11 Python
django云端留言板实例详解
Jul 22 Python
Python调用Windows命令打印文件
Feb 07 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
Feb 10 Python
python3通过udp实现组播数据的发送和接收操作
May 05 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
Jul 13 Python
15个Pythonic的代码示例(值得收藏)
Oct 29 Python
Django框架实现在线考试系统的示例代码
Nov 30 Python
常用的Python代码调试工具总结
Jun 23 Python
远程部署工具Fabric详解(支持Python3)
Jul 04 #Python
Python之修改图片像素值的方法
Jul 03 #Python
在python中,使用scatter绘制散点图的实例
Jul 03 #Python
python opencv 二值化 计算白色像素点的实例
Jul 03 #Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
Jul 03 #Python
python画图--输出指定像素点的颜色值方法
Jul 03 #Python
基于python的Paxos算法实现
Jul 03 #Python
You might like
基于simple_html_dom的使用小结
2013/07/01 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
PHP之header函数详解
2021/03/02 PHP
JavaScript的parseInt 进制问题
2009/05/07 Javascript
IE与FireFox中的childNodes区别
2011/10/20 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
懒加载实现的分页&&网站footer自适应
2016/12/21 Javascript
Bootstrap select多选下拉框实现代码
2016/12/23 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
js处理包含中文的字符串实例
2017/10/11 Javascript
javascript Function函数理解与实战
2017/12/01 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
python处理csv数据的方法
2015/03/11 Python
python使用插值法画出平滑曲线
2018/12/15 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
Python pandas如何向excel添加数据
2020/05/22 Python
Python如何重新加载模块
2020/07/29 Python
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
俄罗斯童装网上商店:BebaKids
2020/06/06 全球购物
应用心理学个人的求职信
2013/12/08 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
微信小程序实现拍照和相册选取图片
2021/05/09 Javascript
go select编译期的优化处理逻辑使用场景分析
2021/06/28 Golang
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android