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

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

多年来,数据存储的可能格式显著增加,但是,在日常使用中,还是以CSVJSONXML占主导地位。在本文中,我将与你分享在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读取和写入文件都只需要一行代码!

我们甚至可以使用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)

欢迎关注磐创博客资源汇总站:

http://docs.panchuang.net/

欢迎关注PyTorch官方中文教程站:

http://pytorch.panchuang.net/

一文综述python读写csv xml json文件各种骚操作的更多相关文章

  1. pyspark 读写csv、json文件

    from pyspark import SparkContext,SparkConf import os from pyspark.sql.session import SparkSession de ...

  2. python读写word、excel、csv、json文件

    http://blog.csdn.net/pipisorry/article/details/50368044 python读写word文档 (include wps)将word文档转换成txt文档 ...

  3. 使用Python读写csv文件的三种方法

    Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...

  4. python读写csv文件

    文章链接:https://www.cnblogs.com/cloud-ken/p/8432999.html Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗 ...

  5. (Python基础教程之十二)Python读写CSV文件

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  6. python之文件的读写和文件目录以及文件夹的操作实现代码

    这篇文章主要介绍了python之文件的读写和文件目录以及文件夹的操作实现代码,需要的朋友可以参考下 为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用 ...

  7. Python中yaml和json文件的读取和应用

    Python对yaml和json文件的读取: yaml文件读取: 首先创建一个yaml文件test.yaml import yaml   #引入包 f=open(path)  #建立Python的文件 ...

  8. Python小白需要知道的 20 个骚操作!

    Python小白需要知道的 20 个骚操作! Python 是一个解释型语言,可读性与易用性让它越来越热门.正如 Python 之禅中所述: 优美胜于丑陋,明了胜于晦涩. 在你的日常编码中,以下技巧可 ...

  9. Python 导入CSV、JSON、XML数据

    常见的机器可读格式包括: - 逗号分隔值(Comma-Separated Values,CSV)- 制表符分隔值(tab-separated values,TSV)- JavaScript 对象符号( ...

随机推荐

  1. 银行储蓄程序(C++,simple)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  2. 网站提权之MSF骚操作

    当我们在进行web渗透测试的时候,拿到了webshell,但是在执行net user.whoami.类似的命令会发现怎么好像用不了,没有回显,权限不够,这可怎么办呐? 测试环境: 内网,没钱买服务器, ...

  3. mysql in与exists区别

    1.exists是对外表做loop循环,每次loop循环再对内表(子查询)进行查询,那么因为对内表的查询使用的索引(内表效率高,故可用大表),而外表有多大都需要遍历,不可避免(尽量用小表),故内表大的 ...

  4. 优雅的创建一个JavaScript库

    这篇文章的目的是通过演示一个简单的例子来介绍在JS中实例化和定义一个库的正确方法,以优化他人编写或维护自己的JS库. 在我们深入之前,我做了两点假设: 你知道简单的JavaScript或C语言. 你不 ...

  5. 【开发技巧】再见,BLE的那些坑!

    蓝牙,平常你用的多吗?上班路上戴着蓝牙耳机听音乐.看视频打开蓝牙分享个人热点给小伙伴们解锁共享单车时,打开蓝牙就能迅速解锁...... BLE-蓝牙低能耗技术,方便了我们的生活,但是开发者在开发过程中 ...

  6. 【30分钟学完】canvas动画|游戏基础(6):坐标旋转探究

    前言 本篇主要讲坐标旋转及其应用,这是编程动画必不可少的技术. 阅读本篇前请先打好前面的基础. 本人能力有限,欢迎牛人共同讨论,批评指正. 坐标旋转 模拟场景:已知一个中心点(centerX,cent ...

  7. var, let ,const区别

    ES6中加入了let,const字符,先说说新的区别: 作用域:let 声明的变量只在它所在的代码块内有效,而且不存在变量提升,即变量可以在声明之前使用,值为undefined.let未声明变量前会报 ...

  8. Python进阶练习与爬取豆瓣T250的影片相关信息

    (一)Python进阶练习 正所谓要将知识进行实践,才会真正的掌握 于是就练习了几道题:求素数,求奇数,求九九乘法表,字符串练习 import re #求素数 i=1; flag=0 while(i& ...

  9. Netty源码分析之ChannelPipeline—出站事件的传播

    上篇文章中我们梳理了ChannelPipeline中入站事件的传播,这篇文章中我们看下出站事件的传播,也就是ChannelOutboundHandler接口的实现. 1.出站事件的传播示例 我们对上篇 ...

  10. 【翻译】.NET 5 Preview 1 发布

    .NET 5 Preview 1 发布 去年年底,我们发布了.NET Core 3.0和3.1.这些版本添加了桌面应用程序模型Windows Forms(WinForms)和WPF,ASP.NET B ...