CSV,全稱爲Comma-Separated Values,它以逗號分隔值,其文件以純文本形式存儲表格數據,該文件是一個字符序列,能夠由任意數目的記錄組成,每條記錄有字段組成,字段間分隔符是逗號或製表符,至關於結構化的純文本形式,它比Excel文件更簡潔,用來存儲數據比較方便html
csv.reader(csvfile,dialect='excel',**fmtparams)python
遍歷CSV文件對象並返回,csvfiel能夠是任何支持迭代器協議的對象,若是csvfile是一個文件對象,它須要指定newline=''git
csv.writer(csvfile,dialect='excel',**fmtparams)github
寫入數據到csv文件中,csvfile能夠是具備寫入方法的任何對象,若是csvfiel是一個文件對象,應該用newline=''指定換行符(unix上位'\n',windows上位'\r\n')windows
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/27 11:44 # @Author : Py.qi # @File : csv_file1.py # @Software: PyCharm import csv iterable=[['1','zs',20,8998,20180627],['1','zs',20,8998,20180627],['1','zs',20,8998,20180627]] with open('csvfile.csv','w',newline='') as csvf: spanwriter=csv.writer(csvf,dialect='excel') #建立writer對象 spanwriter.writerow(['id','name','age','salary','date']) #使用writer的方法writerow寫入到文件 spanwriter.writerows(iterable) #迭代寫入數據 with open('csvfile.csv','r',newline='') as csvf: spamreader=csv.reader(csvf) #建立reader對象 for i in spamreader: print('\t'.join(i)) #指定分隔符,讀取csv文件數據 # id name age salary date 1 zs 20 8998 20180627 1 zs 20 8998 20180627 1 zs 20 8998 20180627
class csv.
DictReader
(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)安全
以字典的形式讀取csv文件的行,fileldnames參數指定鍵,restkey指定默認key,restval指定默認value,dialect指定方言curl
class csv.
DictWriter
(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)函數
建立一個字典形式的csv操做對象,f爲寫入的文件,fieldnames爲制定key,restval制定默認value,extrasaction表示,若是在使用writerow()方法寫入數據的字典中字段名找不到的鍵,則此參數將執行操做,若是設置爲saise則會引起valueError,若是設置爲ignore則字典中的額外值將被忽略佈局
reader對象,DictReader實例和reader()對象具備的方法和屬性:測試
csvreader.__next__():迭代讀取對象的下一行
csvreader.dialect:解析器使用的方言
csvreader.line_num:從源迭代器讀取的行數
csvreader.fieldnames:若是在建立對象時爲做爲參數傳遞,則在首次訪問文件或讀取第一條記錄是初始化此屬性,此屬性只適用於DictReader對象
writer對象,DictWriter和writer()實例對象具備的方法和屬性:
csvwriter.writerow():將行參數寫入到文件對象,根據當前的方言格式化
csvwriter.writerows(row):將row中的全部元素,行對象的迭代寫入到文件對象
csvwriter.dialect:解析器使用的方言
DictWriter.writeheader():寫入一行字段名,只適用於DictWriter對象
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/27 12:13 # @Author : Py.qi # @File : csv_file2.py # @Software: PyCharm import csv import pandas iter=[ {'id':2,'name':'wanwu','age':23,'date':20180627}, {'id':3,'name':'zhaoliu','age':24,'date':20180627}, {'id':4,'name':'tianqi','age':25,'date':20180627} ] #寫入文件 with open('names.csv','w',newline='') as csvf: fieldnames=['id','name','age','date'] writer=csv.DictWriter(csvf,fieldnames=fieldnames) writer.writeheader() writer.writerow({'id':1,'name':'lisii','age':22,'date':20180627}) writer.writerows(iter) #讀取文件 with open('names.csv','r') as csvf: reader=csv.DictReader(csvf,fieldnames=fieldnames) for i in reader: print(i['id'],i['name'],i['age'],i['date']) #也可使用pandas模塊來讀取csv文件 df=pandas.read_csv('names.csv') print(df) # id name age date 1 lisii 22 20180627 2 wanwu 23 20180627 3 zhaoliu 24 20180627 4 tianqi 25 20180627 id name age date 0 1 lisii 22 20180627 1 2 wanwu 23 20180627 2 3 zhaoliu 24 20180627 3 4 tianqi 25 20180627
Excel 是當今最流行的電子表格處理軟件,支持豐富的計算函數及圖表,在系統運營方
面普遍用於運營數據報表,好比業務質量、資源利用、安全掃描等報表,時也是應用系統
常見的文件導出格式, 以便數據使用人員作進一步加工處理。
利用 Python 操做Excel 的模塊 XlsxWriter(https: // xlsxwriter.readthedocs.org),能夠操做多個工做表的文字、數字、公式、圖表等。XlsxWriter 模塊具備如下功能:
# pip install XlsxWriter #pip 安裝方法 # easy_install XlsxWriter #easy_install 安裝方法 # 源碼安裝方法 # curl -O -L http://github.com/jmcnamara/XlsxWriter/archive/master.tar.gz # tar zxvf master.tar.gz # cd XlsxWriter-master/ # sudo python setup.py install
簡單示例,建立一個Excel文件,插入文字、數字,計算公式和圖片,設置單元格格式
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/27 14:00 # @Author : Py.qi # @File : xlsxWriter_f1.py # @Software: PyCharm import xlsxwriter workbook=xlsxwriter.Workbook('demo.xlsx') #建立一個Excel文件 worksheet=workbook.add_worksheet() #建立一個工做表對象 worksheet.set_column('A:A',20) #設置第一列A寬度爲20像素 bold=workbook.add_format({'bold':True}) #定義一個加粗的格式對象 worksheet.write('A1','HELLO') #A1單元格寫入HELLO worksheet.write('A2','world',bold) #A2寫入world並引用加粗格式對象bold worksheet.write('B2',u'中文測試',bold) #B2寫入中文引用加粗格式bold worksheet.write(2,0,32) #用行列表示法寫入數字32與35.5 worksheet.write(3,0,35.5) #行列表示法的單元格下標以0做爲起始值,‘3,0’等價與A3 worksheet.write(4,0,'=SUM(A3:A4)') #求和A3:A4 worksheet.insert_image('B5','14.png') #在B5插入圖片 workbook.close()
Workbook 類定義:Workbook(filename[, options])
該類實現建立一個 XlsxWriter 的 Workbook對象。Workbook 類表明整個電子表格文件,而且存儲在磁盤上。參數 filename(String 類型)爲建立的 Excel 文件存儲路徑;參數 options(Dict 類型)爲可選的 Workbook 參數,通常做爲初始化工做表內容格式,例如值爲 {'strings_to_numbers': True} 表示使用 worksheet.write() 方法時激活字符串轉換數字。
add_worksheet([sheetname])方法,做用是添加一個新的工做表,參數 sheetname(String 類型)爲可選的工做表名稱,默認爲 Sheet1
#添加一個新工做表名稱爲data worksheet=workbook.add_worksheet('data')
add_format([properties]) 方法,做用是在工做表中建立一個新的格式對象來格式化單元格。參數 properties(dict 類型)爲指定一個格式屬性的字典,例如設置一個加粗的格式對象,workbook.add_format({'bold': True})
#!/usr/bin/env python #coding:utf-8 import xlsxwriter workfile=xlsxwriter.Workbook('test.xlsx') #建立Excel文件 worksheet=workfile.add_worksheet('sh1') #建立工做表 format=workfile.add_format({'bg_color':'red','font_size':'18','font_color':'yellow'}) #定義格式對象,背景爲紅色,字體大小18,字體顏色黃色 worksheet.set_column('A:A',20) #設置A列寬度爲20像素 worksheet.write('A1','python',format) #寫入文件並應用格式 workfile.close() #關閉文件
更多格式化方法見http://xlsxwriter.readthedocs.io/format.html#format
add_chart(options)方法,做用是在工做表中建立一個圖表對象,內部是經過 insert_chart() 方法來實現,參數 options(dict 類型)爲圖表指定一個字典屬性,例如設置一個線條類型的圖表對象,代碼爲 chart = workbook.add_chart({'type': 'line'})
close() 方法,做用是關閉工做表文件,如 workbook.close()
Worksheet 類表明了一個 Excel 工做表,是 XlsxWriter 模塊操做 Excel 內容最核心的一個類,例如將數據寫入單元格或工做表格式佈局等。Worksheet 對象不能直接實例化,取而代之的是經過 Workbook 對象調用 add_worksheet() 方法來建立。Worksheet 類提供了很是豐富的操做 Excel 內容的方法,其中幾個經常使用的方法以下:
write(row, col, *args) 方法:
做用是寫普通數據到工做表的單元格,參數 row 爲行座標,col 爲列座標,座標索引發始值爲 0;* args 無名字參數爲數據內容,能夠爲數字、公式、字符串或格式對象。爲了簡化不一樣數據類型的寫入過程,write 方法已經做爲其餘更加具體數據類型方法的別名,包括:
write_string() 寫入字符串類型數據,如:worksheet.write_string(0, 0, 'Your text here')
write_number() 寫入數字類型數據,如:worksheet.write_number('A2', 2.3451)
write_blank() 寫入空類型數據,如:worksheet.write('A2', None)
write_formula() 寫入公式類型數據,如:worksheet.write_formula(2, 0, '=SUM(B1:B5)')
write_datetime() 寫入日期類型數據,如:worksheet.write_datetime(7, 0, datetime.datetime.strptime('2013-01-23','%Y-%m-%d'),workbook.add_format({'num_format': 'yyyy-mm-dd'}))
write_boolean() 寫入邏輯類型數據,如:worksheet.write_boolean(0, 0, True);
write_url() 寫入超連接類型數據,如:worksheet.write_url('A1', 'ftp://www.python.org/')
下面經過具體的示例來觀察別名write方法與數據類型方法的對應關係:
#!/usr/bin/env python #coding:utf-8 import xlsxwriter workbook=xlsxwriter.Workbook('test1.xlsx') worksheet=workbook.add_worksheet(name='中文') worksheet.write(0,0,'hello') #寫入字符串 worksheet.write(1,0,2) worksheet.write(2,0,3.001) #寫入數字 worksheet.write(3,0,'=SIN(PI()/4)') #寫入公式 worksheet.write(4,0,'') #寫入空 worksheet.write(5,0,'http://www.baidu.com') #寫入url workbook.close()
set_row(row, height, cell_format, options)方法:
做用是設置行單元格的屬性。參數row(int 類型)指定行位置,起始下標爲 0 ;參數 height(float 類型)設置行高,單位像素;參數 cell_format(format 類型)指定格式對象;參數 options(dict 類型)設置行 hidden(隱藏)、level(組合分級)、collapsed(摺疊)
worksheet.write('A1','hello') #在A1寫入字符串 cell_format=workbook.add_format({'bold':True}) #定義加粗的格式對象 worksheet.set_row(0,40,cell_format) #設置第1行單元格高度爲40像素,且引用加粗格式對象 worksheet.set_row(1,None,None,{'hidden':True}) #隱藏第2行單元格
set_column(first_col, last_col, width, cell_format, options)方法:
做用爲設置一列或多列單元格屬性。參數 first_col(int 類型)指定開始列位置,起始下標爲 0 ;參數 last_col(int 類型)指定結束列位置,起始下標爲 0,能夠設置成與 first_col 同樣;參數width(float 類型)設置列寬;參數 cell_format(Format 類型)指定格式對象;參數options(dict 類型)設置行 hidden(隱藏)、level(組合分級)、collapsed(摺疊)
#!/usr/bin/env python #coding:utf-8 import xlsxwriter workbook=xlsxwriter.Workbook('test2.xlsx') worksheet=workbook.add_worksheet('test') worksheet.write('A1','Hello') cell_format=workbook.add_format({'bold':True}) worksheet.set_column(0,1,10,cell_format) #設置0到1即A到B列單元格寬度爲10像素,且引用加粗格式對象 worksheet.set_column('C:D',20) #設置C到D列單元格寬度爲20像素 worksheet.set_column('E:G',None,None,{'hidden':1}) #隱藏E到G列單元格
insert_image(row, col, image[, options]) 方法:
做用是插入圖片到指定單元格,支持PNG、JPEG、BMP 等圖片格式。參數 row 爲行座標,col 爲列座標,座標索引發始值爲 0 ;參數 image(string 類型)爲圖片路徑;參數 options(dict 類型)爲可選參數,做用是指定圖片的位置、比例、連接 URL 等信息
#!/usr/bin/env python #coding:utf-8 import xlsxwriter workbook=xlsxwriter.Workbook('test3.xlsx') worksheet=workbook.add_worksheet('test') #在B5單元格插入22.jpg圖片,圖片超連接爲http://python.org worksheet.insert_image('B5','D:/22.jpg',{'url':'http://python.org'}) workbook.close()
Chart 類實如今 XlsxWriter 模塊中圖表組件的基類,支持的圖表類型包括面積、條形圖、柱形圖、折線圖、餅圖、散點圖、股票和雷達等,一個圖表對象是經過 Workbook(工做簿)的 add_chart 方法建立,經過 {type, ' 圖表類型 '} 字典參數指定圖表的類型,語句以下:
chart =workbook.add_chart({'type':'column'}) #建立一個column柱形圖表
更多圖表類型說明:
area:建立一個面積樣式的圖表
bar:建立一個條形樣式的圖表
column:建立一個柱形樣式的圖表
line:建立一個線條樣式的圖表
pie:建立一個餅圖樣式的圖表
scatter:建立一個散點樣式的圖表
stock:建立一個股票樣式的圖表
radar:建立一個雷達樣式的圖表
而後再經過 Worksheet(工做表)的 insert_chart() 方法插入到指定位置,語句以下:
worksheet.insert_chart('A7', chart) # 在 A7 單元格插入圖表
下面介紹 chart 類的幾個經常使用方法:
chart.add_series(options) 方法:
做用爲添加一個數據系列到圖表,參數 options(dict類型) 設置圖表系列選項的字典,操做示例以下:
chart.add_series({ 'categories': '=Sheet1!$A$1:$A$5', 'values': '=Sheet1!$B$1:$B$5', 'line': {'color': 'red'}, })
add_series 方法,最經常使用的三個選項爲 categories、values、line,其中 categories 做用是設置圖表類別標籤範圍;values 爲設置圖表數據範圍;line 爲設置圖表線條屬性,包括顏色、寬度等。
其餘經常使用方法及示例:
set_x_axis(options) 方法:設置圖表 X 軸選項,示例代碼以下:
chart.set_x_axis({ 'name': 'Earnings per Quarter', #設置 X 軸標題名稱 'name_font': {'size': 14, 'bold': True}, #設置 X 軸標題字體屬性 'num_font': {'italic': True }, #設置 X 軸數字字體屬性 })
set_size(options) 方法:設置圖表大小,如:chart.set_size({'width':720,'height':576}),其中width爲寬度,height爲高度
set_title(options) 方法:設置圖表標題,如:chart.set_title({'name':'Year End Results'})
set_style(style_id) 方法:設置圖表樣式,style_id 爲不一樣數字則表明不一樣樣式,如chart.set_style(37)
set_table(options) 方法:設置 X 軸爲數據表格形式,如 chart.set_table()
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/28 9:31 # @Author : Py.qi # @File : chart_writer.py # @Software: PyCharm import xlsxwriter #建立數據表 workbook=xlsxwriter.Workbook('test.xlsx') worksheet=workbook.add_worksheet() title=[u'部門名稱',u'一月份',u'二月份',u'三月份',u'四月份',u'五月份',u'平均值'] department=[u'技術部',u'市場部',u'財務部',u'工程部',u'安所有'] data=[ [123,135,145,159,168], [88,99,105,112,146], [78,75,71,68,89], [110,123,159,189,201], [98,156,198,175,58], ] format=workbook.add_format({'bold':True,'border':1,'bg_color':'#cccccc'}) format_val=workbook.add_format({'border':1,'align':'center'}) worksheet.set_row(0,20) worksheet.set_column('A:F',10) worksheet.write_row('A1',title,format) worksheet.write_column('A2',department,format) worksheet.write_row('B2',data[0],format_val) worksheet.write_row('B3',data[1],format_val) worksheet.write_row('B4',data[2],format_val) worksheet.write_row('B5',data[3],format_val) worksheet.write_row('B6',data[4],format_val) #建立圖表 chart=workbook.add_chart({'type':'column'}) #圖表數據插入函數 def chart_series(cur_row): worksheet.write_formula('G'+cur_row,'=AVERAGE(B'+cur_row+':F'+cur_row+')',format_val) chart.add_series({ 'categories':'=Sheet1!$B$1:$F$1', 'values':'=Sheet1!$B'+cur_row+':$F$'+cur_row, 'name':'=Sheet1!$A$'+cur_row }) #循環插入數據 for i in range(2,7): chart_series(str(i)) chart.set_size({'width':677,'height':380}) #設置圖表寬和高 chart.set_title({'name':u'業績表'}) #設置圖表標題 #chart.set_table() #設置圖表table樣式 worksheet.insert_chart('A10',chart) #圖表插入到工做表中 workbook.close()
經過XlsxWriter模塊將流量數據寫入Excel文檔,同時自動計算各頻道周平均流量,在生成數據圖表,具體是經過workbook.add_chart({'tyep':'column'})方法指定圖表類型爲柱形,使用write_row,write_column方法分別以行,列方式寫入數據,使用add_format()方法定製表頭,表體的顯示風格,使用add_series()方法將數據添加到圖表,同時使用chart.set_size,set_title,set_y_axis設置圖表的大小及標題屬性,最後經過insert_chart方法將圖表插入工做表中
#!/usr/bin/env python #coding:utf-8 import xlsxwriter workbook=xlsxwriter.Workbook('test4.xlsx') #建立一個Excel文件 worksheet=workbook.add_worksheet() #建立一個工做表對象 chart=workbook.add_chart({'type':'column'}) #建立柱形圖表 #定義數據表頭列表 title=[u'業務名稱',u'星期一',u'星期二',u'星期三',u'星期四',u'星期五',u'星期六',u'星期日',u'平局流量'] buname=[u'業務官網',u'新聞中心',u'購物頻道',u'體育頻道',u'親子頻道'] #定義頻道名稱 #定義5個頻道一週7天的數據列表 data=[ [150,152,158,149,155,145,148], [88,89,95,93,98,100,99], [210,200,158,178,170,198,195], [75,77,78,78,74,70,79], [88,77,87,90,93,88,84], ] format=workbook.add_format() #定義format格式對象 format.set_border(1) #定義format對象單元格邊框加粗1像素的格式 format_title=workbook.add_format() #定義title格式對象 format_title.set_border(1) #定義title格式 format_title.set_bg_color('#cccccc') #定義title對象背景顏色 format_title.set_align('center') #定義title劇中對齊 format_title.set_bold() format_ave=workbook.add_format() #定義format_ave格式對象 format_ave.set_border(1) format_ave.set_num_format('0.00') #定義數字類別顯示格式 #下面分別以行或列寫入方式將標題,業務名稱,流量數據寫入起初單元格,同時引用不一樣格式對象 worksheet.write_row('A1',title,format_title) worksheet.write_column('A2',buname,format) worksheet.write_row('B2',data[0],format) worksheet.write_row('B3',data[1],format) worksheet.write_row('B4',data[2],format) worksheet.write_row('B5',data[3],format) worksheet.write_row('B6',data[4],format) #定義圖表數據系列函數 def chart_series(cur_row): worksheet.write_formula('I'+cur_row,'=AVERAGE(B'+cur_row+':H'+cur_row+')',format_ave) chart.add_series( { 'categories':'=Sheet1!$B$1:$H$1', 'values':'=Sheet1!$B$'+cur_row+':$H$'+cur_row, #'line':{'color':'black'}, 'name':'=Sheet1!$A$'+cur_row, } ) for row in range(2,7): chart_series(str(row)) chart.set_table() #設置X軸表格格式 chart.set_style(30) #設置圖表樣式 chart.set_size({'width':677,'height':380}) chart.set_title({'name':u'業務流量週報圖表'}) chart.set_y_axis({'name':'Mb/s'}) worksheet.insert_chart('A9',chart) workbook.close()
XlsxWriter官網:https://xlsxwriter.readthedocs.io/index.html