用dict读取和写入表格_用Python快速处理表格,让你快人一步两步三四部
日常工作中表格處理時非常令人頭疼的一個部分,
概念
CSV (Comma Separated Values),即逗號分隔值(也稱字符分隔值,因為分隔符可以不是逗號),是一種常用的文本 格式,用以存儲表格數據,包括數字或者字符。很多程序在處理數據時都會碰到csv這種格式的文件,它的使用是比 較廣泛的(Kaggle上一些題目提供的數據就是csv格式),csv雖然使用廣泛,但卻沒有通用的標準,所以在處理csv 格式時常常會碰到麻煩,幸好python內置了csv模塊。下面簡單介紹csv模塊中最常用的一些函數。
讀表格
import csv from collections import namedtuple with open('accessinfo_base.csv',encoding='utf8') as f:f_csv = csv.reader(f)headers = next(f_csv)print('表頭',headers)for row in f_csv:print(row) ## named tuple with open('accessinfo_base.csv',encoding='utf8') as f:f_csv = csv.reader(f)headers = next(f_csv)Row = namedtuple('Row',headers)for r in f_csv:row = Row(*r)print(row,row.role,row.area)## 讀取到字典去中 with open('accessinfo_base.csv',encoding='utf8') as f:f_csv = csv.DictReader(f)for r in f_csv:print(r)寫表格
## 讀取到字典去中 with open('accessinfo_base.csv',encoding='utf8') as f:f_csv = csv.DictReader(f)for r in f_csv:print(r)## 寫入csv,先創(chuàng)建一個csv的writer對象 with open('test1.csv', 'w', encoding='utf8') as f:headers = ['ip', 'area', 'role']rows = [['127.0.0.1', 'A', 'AS'], ['127.0.0.1', 'A', 'AS'], ['127.0.0.1', 'A', 'AS'], ['127.0.0.1', 'A', 'AS']]csv_writer = csv.writer(f)csv_writer.writerow(headers)csv_writer.writerows(rows) # newline很重要,不然會出現(xiàn)間隔的空白行,w代表寫文件。 with open('test2.csv', 'w', encoding='utf8',newline='') as f:headers = ['ip', 'area', 'role']rows = [['127.0.0.1', 'A', 'AS'], ['127.0.0.1', 'A', 'AS'], ['127.0.0.1', 'A', 'AS'], ['127.0.0.1', 'A', 'AS']]csv_writer = csv.writer(f,delimiter='t')csv_writer.writerow(headers)csv_writer.writerows(rows)## 字典的方式寫入 with open('test3.csv', 'w', encoding='utf8',newline='') as f:headers = ['ip', 'area', 'role']rows = [{'ip': '12','area': 'a','role': 'as'},{'ip': '12','area': 'a','role': 'as'},{'ip': '12','area': 'a','role': 'as'},]csv_writer = csv.DictWriter(f,headers)csv_writer.writeheader()csv_writer.writerows(rows)xlrd
讀Excel文件
支持xls、xlsx
import xlrd def print_excel(filePath):myWbook = xlrd.open_workbook(filePath)mySheet = myWbook.sheet_by_index(0)# 也可以使用函數mySheet = myWbook.sheet_by_name('sheet1')nrows = mySheet.nrows # 行數ncols = mySheet.ncols # 列數i = 1err_num=0while i < nrows:try:print(mySheet.row_values(i))a = mySheet.row(i)[0].valueb = mySheet.row(i)[1].valuec = mySheet.row(i)[2].valueprint(a,b,c)i = i + 1except Exception as e:print(e)err_num = err_num + 1i = i + 1return err_num # success def print_excel_2(filePath):myWbook = xlrd.open_workbook(filePath)mySheet = myWbook.sheet_by_index(0)# 也可以使用函數mySheet = myWbook.sheet_by_name('sheet1')cell_type = mySheet.cell(1,2).ctype## 1為字符串、2為數字 3為日期print(cell_type)#取某個位置的值print(mySheet.cell(1,1).value)print(mySheet._cell_values)##讀取整個cell if __name__ == '__main__':print_excel_2('accessinfo_base.xls')pandas
pandas是一款數據處理的工具,基于Numpy去編寫的。提供了大量快捷處理數據的函數和方法。
本次我使用它在讀寫表格的一些便捷的方法。
讀表格
首先可以先創(chuàng)建一個excel文件當作實驗數據,名稱為example.xlsx,內容如下:
讀取并打印
注意 sheet名要對應起來。
# coding:utf-8 import pandas as pddata = pd.read_excel('example.xlsx', sheet_name='Sheet1') print(data)這里使用了read_excel()方法來讀取excel,來看一個read_excel()這個方法的API,這里只截選一部分經常使用的參數:
pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None)
這里主要參數為io,sheet_name,header,usecols和names
io:excel文件路徑
sheet_name:返回指定的sheet,如果將sheet_name指定為None,則返回第一頁,如果需要返回多個表,可以將sheet_name指定為一個列表,例如['sheet1', 'sheet2']
header:指定數據表的表頭,默認值為0,即將第一行作為表頭。如果表中無表頭,此值應為None,對應的表頭會用索引表示,也可搭配names,指定表頭。
usecols:讀取指定的列,例如想要讀取第一列和第二列數據:
pd.read_excel("example.xlsx", sheet_name=None, usecols=[0, 1])
index_col 指定某列為索引
遍歷所有行
# coding:utf-8 import pandas as pddata = pd.read_excel('example.xlsx', ) print(data) for index, row in data.iterrows():print(row['name'], row['age'], row['gender'])print(row[0], row[1], row[2])以轉換dict的list的方式讀取
# coding:utf-8 import pandas as pddata = pd.read_excel('example.xlsx', ) data = data.to_dict(orient='records') print(data)寫表格
# coding:utf-8 import pandas as pdraw_data = [{'name': 'John', 'age': 30, 'gender': 'male'}, {'name': 'Mary', 'age': 22, 'gender': 'female'}, {'name': 'Smith', 'age': 32, 'gender': 'male'}] data = pd.DataFrame(raw_data) print(data) data.to_excel('example_output.xlsx', sheet_name='Test01', index=False, header=True)數據的計算
我們只寫數據計算部分,不去寫讀取和寫入的部分。
有時候我們需要處理表格中的內容,比如根據表格中的多項字段生成一個新的字段,得到一個新的結論。
比如有時候考試題出的太難了,大家都不及格,我們想讓大家都及格,可以這樣寫。我們沒有采用乘以10開根號的辦法,我們簡單點。
import pandas as pdraw_data = [{'name': 'John', 'score': 30, 'gender': 'male'}, {'name': 'Mary', 'score': 22, 'gender': 'female'},{'name': 'Smith', 'score': 32, 'gender': 'male'}] data = pd.DataFrame(raw_data) print(data)def jige(row):print(row)if row['score'] < 60:return 60return row['score']data['new_score'] = data.apply(jige, axis=1) print(data)這個代碼的讀取和寫入我們省略了,大家可以自己補充上。
通過在數據里調用我們的函數,我們成功讓大家都及格了。
我們想像下運維中的場景,比如根據端口類型、描述得出某些結論即一個新的字段。
計算此端口上是否有crc err數,甚至可以根據以往記錄去計算crc的增長。
判斷某些指標是否超過閾值,得出一個個的結論,即很多字段,加之組合生成一個巡檢報告。
真的是拋磚。
還是希望分享一些方法,大家學會點基礎的后,自己開腦洞!
好了關于Python的入門、讀寫文件、表格操作我們就講完了!歡迎大家關注公眾號,后續(xù)的分享會緊貼網絡運維。
后續(xù)我們會聚焦網絡運維,講解一些能夠提高我們運維效率的工具、技術、代碼等等,講解一些在云計算時代所需要了解的開源組件。
大家有什么想了解的也可以私信我,我會分享我所了解的部分~
總結
以上是生活随笔為你收集整理的用dict读取和写入表格_用Python快速处理表格,让你快人一步两步三四部的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分布对齐 目标函数 迁移学习_原创 |
- 下一篇: 如何动态修改uri_maven如何动态统