zoukankan      html  css  js  c++  java
  • 一文综述python读写csv xml json文件各种骚操作

    
     

    640?wx_fmt=png

    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/

     

  • 相关阅读:
    后台数值往前台传值,能获取到值,页面显示不出来的问题
    总结jquery中对select和option的基本操作
    使用<input type="image" src="...">标签会引发页面刷新的问题
    用java来实现验证码功能。
    用java来实现验证码功能(本帖为转载贴),作为个人学习收藏用
    使用java实现发送邮件的功能
    java中的中文参数存到数据库乱码问题
    模糊查询时,页面没有数据,数据库编辑器里可以正常显示数据
    c# 无法加载 DLL xxxxxxxx找不到指定的模块。 (异常来自HRESULT:0x8007007E)。的一个解决方法
    关于C#调用C++ 的DLL传送字符串显示乱码的解决
  • 原文地址:https://www.cnblogs.com/panchuangai/p/12568073.html
Copyright © 2011-2022 走看看