一文綜述python讀寫csv xml json文件各類騷操做

 

640?wx_fmt=png

 

Python優越的靈活性和易用性使其成爲最受歡迎的編程語言之一,尤爲是對數據科學家而言。這在很大程度上是由於使用Python處理大型數據集是很簡單的一件事情。python

 

現在,每家科技公司都在制定數據戰略。他們都意識到,擁有正確的數據(乾淨、儘量多)會給他們帶來關鍵的競爭優點。數據,若是使用有效,能夠提供深層次的、隱藏在表象之下的信息。編程

 

多年來,數據存儲的可能格式顯著增長,可是,在平常使用中,仍是以CSVJSONXML占主導地位。在本文中,我將與你分享在Python中使用這三種流行數據格式及其之間相互轉換的最簡單方法!json

 

CSV 數據

CSV文件是存儲數據的最多見方式,你會發現,Kaggle競賽中的大多數數據都是以這種方式存儲的。咱們可使用Python內置的csv庫讀寫CSV文件,一般,咱們將數據讀入一個列表中,列表中每一個元素又是一個列表,表明一行數據。app

 

觀察下面的代碼,當咱們運行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)ide

在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).net

固然,使用強大的pandas庫將會使處理數據變得容易不少,從CSV讀取和寫入文件都只須要一行代碼!code

 

咱們甚至可使用pandas經過一行代碼快速將CSV轉換爲字典列表。轉換爲字典列表以後,咱們可使用dicttoxml庫將其轉換爲XML格式,咱們還能夠將它保存爲JSON文件!xml

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/

相關文章
相關標籤/搜索