一文秒懂python读写csv xml json文件各种骚操作
Python优越的灵活性和易用性使其成为最受欢迎的编程语言之一,尤其是对数据科学家而言。这在很大程度上是因为使用Python处理大型数据集是很简单的一件事情。
如今,每家科技公司都在制定数据战略。他们都意识到,拥有正确的数据(干净、尽可能多)会给他们带来关键的竞争优势。数据,如果使用有效,可以提供深层次的、隐藏在表象之下的信息。
多年来,数据存储的可能格式显著增加,但是,在日常使用中,还是以CSV、JSON和XML占主导地位。在本文中,我将与你分享在Python中使用这三种流行数据格式及其之间相互转换的最简单方法!
CSV数据
CSV文件是存储数据的最常见方式,你会发现,Kaggle竞赛中的大多数数据都是以这种方式存储的。我们可以使用Python内置的csv库读写CSV文件,通常,我们将数据读入一个列表中,列表中每个元素又是一个列表,代表一行数据。
观察下面的代码,当我们运行csv.reader()时,就可以访问到我们指定的CSV数据文件。而csvreader.next()函数的作用是从CSV中读取一行,每次调用它,它都会移动到下一行。我们还可以通过forrowincsvreader使用for循环遍历csv的每一行。另外,最好确保每一行的列数相同,否则,在处理列表时可能会遇到一些错误。
importcsvfilename="my_data.csv"fields=[]rows=[]#读取csv文件withopen(filename,'r')ascsvfile:#创建一个csvreader对象csvreader=csv.reader(csvfile)#从文件中第一行中读取属性名称信息#fields=next(csvreader)python3.2以上的版本使用fields=csvreader.next()#接着一行一行读取数据forrowincsvreader:rows.append(row)#打印前5行信息forrowinrows[:5]:print(row)
在Python将数据写入CSV也很容易,在一个单独的列表中设置属性名称,并将要写入的数据存储在一个列表中。这一次,我们将创建一个writer()对象,并使用它将数据写入文件,这与我们读取数据的方式非常相似。
importcsv#属性名称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文件中withopen(filename,'w+')ascsvfile:#创建一个csvwriter对象csvwriter=csv.writer(csvfile)#写入属性名称csvwriter.writerow(fields)#写入数据csvwriter.writerows(rows)
当然,使用强大的pandas库将会使处理数据变得容易很多,从CSV读取和写入文件都只需要一行代码!
importpandasaspdfilename="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文件!
importpandasaspdfromdicttoxmlimportdicttoxmlimportjson#创建一个DataFramedata={'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")withopen('output.json',"w+")asf:json.dump(data_dict,f,indent=4)#将DataFrame转化为一个字典并且将它存储到xml文件中xml_data=dicttoxml(data_dict).decode()withopen("output.xml","w+")asf:f.write(xml_data)
JSON数据
JSON提供了一种干净且易于阅读的格式,因为它维护了一个字典风格的结构。就像CSV一样,Python有一个内置的json模块,使读写变得超级容易!从上面的例子可以看到当我们读取CSV时,可以将数据以字典的形式存储,然后再将字典写入文件。
importjsonimportpandasaspd#使用json模块从json文件中读取数据#以字典形式存储withopen('data.json')asf:data_listofdict=json.load(f)#也可以直接使用pandas直接读取json文件data_df=pd.read_json('data.json',orient='records')#将字典数据保存为json文件#并使用'indent'and'sort_keys'格式化json文件withopen('new_data.json','w+')asjson_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库。
importjsonimportpandasaspdimportcsv#从json文件中读取数据#数据存储在一个字典列表中withopen('data.json')asf:data_listofdict=json.load(f)#以列表中的字典写入倒csv文件中keys=data_listofdict[0].keys()withopen('saved_data.csv','w')asoutput_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确实具有一些额外的特性:你可以使用名称空间来构建和共享标准结构、更好的继承表示,以及用XMLschema、DTD等表示数据的行业标准化方法。
要读取XML数据,我们将使用Python内置的XML模块的子模块ElementTree。这里,我们可以使用xmltodict库将ElementTree对象转换为字典。一旦有了字典,我们就可以像上面一样将字典换转换为CSV、JSON或pandas的DataFrame!
importxml.etree.ElementTreeasETimportxmltodictimportjsontree=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)withopen('new_data_2.json','w+')asjson_file:json.dump(data_dict,json_file,indent=4,sort_keys=True)
总结
以上所述是小编给大家介绍的一文综述python读写csvxmljson文件各种骚操作,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!