一文综述python读写csv xml json文件各种骚操作

Python操作CSV, JSON, XML数据详解
本文探讨了Python中处理CSV、JSON和XML这三种流行数据格式的方法。使用Python内置库和pandas,可以方便地进行读写操作及格式之间的转换。CSV文件常用于数据存储,Python的csv库和pandas简化了读写过程。JSON以其易读性受到青睐,Python的json模块支持轻松读写。XML虽然复杂,但提供了更丰富的特性,如名称空间和标准结构。

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学习企鹅裙:88198-2657  领取python自动化编程资料教程

 

在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')

 

这个数据集包含各种足球比赛的详细比赛统计数据。它由大约 100,000 行和 91 列组成,提供丰富的数据来分析多个维度的球队和球员表现。这些列涵盖一系列类别,例如球队名称、比分、赛季年份、比赛日期以及详细的游戏内统计数据,例如控球、覆盖距离、解围、传球成功率等等。 此数据集包括 18 个联赛,由来自 6 个国家/地区的 3 个联赛组成: 德国:德甲、 德甲联赛、德国足协 法国:法甲、法乙、Coupe de France 英国:英超、冠军、足总杯 意大利:意甲、乙级联赛、意大利杯 西班牙:西甲联赛西甲 2、Primera RFEF 第 1 组 土耳其:Süper Lig:1. 利格、2. 利格怀特集团 标签 football sports analytics machine learning soccer data science football statistics streamlit data visualization football dataset 该数据集非常适合探索足球分析、开发用于比赛预测的机器学习模型、表现分析,甚至深入研究整个赛季的球队动态和球员贡献。 我们相信,该数据集对任何对足球分析、机器学习或数据科学挑战感兴趣的人都很有用,我们希望它可以成为许多令人兴奋的分析和项目的基础。 列和描述 比赛信息 国家/地区:进行比赛的国家/地区。 Lig:比赛发生的联赛或比赛。 home_team:主队的名称。 away_team:客队的名称。 home_score:主队的进球数。 away_score:客队的进球数。 season_year:比赛发生的赛季年份。 Date_day:比赛当天。 Date_hour:比赛开始的小时。 目标和时间安排 first_half:有关上半年表现的详细信息(如果有)。 second_half:有关下半年表现的详细信息(如果有)。 home_team_goals_current_time:主队每次进球的时间。 home_team_goals_current_score:主队每次进球后的累计得分。 home_team_goals:有关主队进球的详细信息。 home_team_goals_assist:助攻主队进球的球员。 away_team_goals_current_time:客队每进一球的时间。 away_team_goals_current_score:客队每次进球后的累计得分。 away_team_goals:有关客队进球的详细信息。 away_team_goals_assist:助攻客队进球的球员。 卡 home_team_yellow_card_current_time:主队收到每张黄牌的时间。 home_team_yellow_card:在主队收到黄牌的球员。 home_team_yellow_card_why:主队收到黄牌的原因。 away_team_yellow_card_current_time:客队每张黄牌的时间。 away_team_yellow_card:在客队收到黄牌的球员。 away_team_yellow_card_why:客队收到黄牌的原因。 home_team_red_card_current_time:主队收到每张红牌的时间。 home_team_red_card:在主队收到红牌的球员。 home_team_red_card_why:主队收到红牌的原因。 away_team_red_card_current_time:客队每张红牌的时间。 away_team_red_card:在客队收到红牌的球员。 away_team_red_card_why:客队收到红牌的原因。 替换 home_team_substitutions_current_time:主队每次换人的时间。 home_team_substitutions:主队被替换的球员。 home_team_substitutions_with:在主队中替换被替换球员的球员。 home_team_substitution_why:主队换人的原因。 away_team_substitutions_current_time:客队每次换人的时间。 away_team_substitutions:客队被替换的球员。 away_team_substitutions_with:在客队中替换替补球员的球员。 away_team_substitution_why:客队换人的原因。 比赛统计 expected_goals_xg_home:主队的预期进球数。 expected_goals_xg_host:客队的预期进球数。 Ball_Possession_Home:主队的控球百分比。 Ball_Possess
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值