教你如何用Python轻轻松松操作Excel、Word、CSV,一文就够了,赶紧码住!!!
Python 操作 Excel
常用工具
數(shù)據(jù)處理是 Python 的一大應(yīng)用場(chǎng)景,而 Excel 又是當(dāng)前最流行的數(shù)據(jù)處理軟件。因此用 Python 進(jìn)行數(shù)據(jù)處理時(shí),很容易會(huì)和 Excel 打起交道。得益于前人的辛勤勞作,Python 處理 Excel 已有很多現(xiàn)成的輪子,比如 xlrd & xlwt & xlutils 、 XlsxWriter 、 OpenPyXL ,而在 Windows 平臺(tái)上可以直接調(diào)用 Microsoft Excel 的開(kāi)放接口,這些都是比較常用的工具,還有其他一些優(yōu)秀的工具這里就不一一介紹,接下來(lái)我們通過(guò)一個(gè)表格展示各工具之間的特點(diǎn):
| 讀取 | 支持 | 不支持 | 支持 | 支持 |
| 寫(xiě)入 | 支持 | 支持 | 支持 | 支持 |
| 修改 | 支持 | 不支持 | 支持 | 支持 |
| xls | 支持 | 不支持 | 不支持 | 支持 |
| xlsx | 高版本 | 支持 | 支持 | 支持 |
| 大文件 | 不支持 | 支持 | 支持 | 不支持 |
| 效率 | 快 | 快 | 快 | 超慢 |
| 功能 | 較弱 | 強(qiáng)大 | 一般 | 超強(qiáng)大 |
以上可以根據(jù)需求不同,選擇合適的工具,現(xiàn)在為大家主要介紹下最常用的 xlrd & xlwt & xlutils 系列工具的使用。
xlrd & xlwt & xlutils 介紹
xlrd&xlwt&xlutils 是由以下三個(gè)庫(kù)組成:
xlrd:用于讀取 Excel 文件;
xlwt:用于寫(xiě)入 Excel 文件;
xlutils:用于操作 Excel 文件的實(shí)用工具,比如復(fù)制、分割、篩選等;
安裝庫(kù)
安裝比較簡(jiǎn)單,直接用 pip 工具安裝三個(gè)庫(kù)即可,安裝命令如下:
$?pip?install?xlrd?xlwt?xlutils寫(xiě)入 Excel
接下來(lái)我們就從寫(xiě)入 Excel 開(kāi)始,話不多說(shuō)直接看代碼如下:
#?導(dǎo)入?xlwt?庫(kù) import?xlwt#?創(chuàng)建?xls?文件對(duì)象 wb?=?xlwt.Workbook()#?新增兩個(gè)表單頁(yè) sh1?=?wb.add_sheet('成績(jī)') sh2?=?wb.add_sheet('匯總')#?然后按照位置來(lái)添加數(shù)據(jù),第一個(gè)參數(shù)是行,第二個(gè)參數(shù)是列 #?寫(xiě)入第一個(gè)sheet sh1.write(0,?0,?'姓名') sh1.write(0,?1,?'專業(yè)') sh1.write(0,?2,?'科目') sh1.write(0,?3,?'成績(jī)')sh1.write(1,?0,?'張三') sh1.write(1,?1,?'信息與通信工程') sh1.write(1,?2,?'數(shù)值分析') sh1.write(1,?3,?88)sh1.write(2,?0,?'李四') sh1.write(2,?1,?'物聯(lián)網(wǎng)工程') sh1.write(2,?2,?'數(shù)字信號(hào)處理分析') sh1.write(2,?3,?95)sh1.write(3,?0,?'王華') sh1.write(3,?1,?'電子與通信工程') sh1.write(3,?2,?'模糊數(shù)學(xué)') sh1.write(3,?3,?90)#?寫(xiě)入第二個(gè)sheet sh2.write(0,?0,?'總分') sh2.write(1,?0,?273)#?最后保存文件即可 wb.save('test.xls')運(yùn)行代碼,結(jié)果會(huì)看到生成名為 test.xls 的 Excel 文件,打開(kāi)文件查看如下圖所示:
以上就是寫(xiě)入 Excel 的代碼,是不是很簡(jiǎn)單,下面我們?cè)賮?lái)看下讀取 Excel 該如何操作。
讀取 Excel
讀取 Excel 其實(shí)也不難,請(qǐng)看如下代碼:
#?導(dǎo)入?xlrd?庫(kù) import?xlrd#?打開(kāi)剛才我們寫(xiě)入的?test_w.xls?文件 wb?=?xlrd.open_workbook("test_w.xls")#?獲取并打印?sheet?數(shù)量 print(?"sheet?數(shù)量:",?wb.nsheets)#?獲取并打印?sheet?名稱 print(?"sheet?名稱:",?wb.sheet_names())#?根據(jù)?sheet?索引獲取內(nèi)容 sh1?=?wb.sheet_by_index(0) #?或者 #?也可根據(jù)?sheet?名稱獲取內(nèi)容 #?sh?=?wb.sheet_by_name('成績(jī)')#?獲取并打印該?sheet?行數(shù)和列數(shù) print(?u"sheet?%s?共?%d?行?%d?列"?%?(sh1.name,?sh1.nrows,?sh1.ncols))#?獲取并打印某個(gè)單元格的值 print(?"第一行第二列的值為:",?sh1.cell_value(0,?1))#?獲取整行或整列的值 rows?=?sh1.row_values(0)?#?獲取第一行內(nèi)容 cols?=?sh1.col_values(1)?#?獲取第二列內(nèi)容#?打印獲取的行列值 print(?"第一行的值為:",?rows) print(?"第二列的值為:",?cols)#?獲取單元格內(nèi)容的數(shù)據(jù)類型 print(?"第二行第一列的值類型為:",?sh1.cell(1,?0).ctype)#?遍歷所有表單內(nèi)容 for?sh?in?wb.sheets():for?r?in?range(sh.nrows):#?輸出指定行print(?sh.row(r))輸出如下結(jié)果:
細(xì)心的朋友可能注意到,這里我們可以獲取到單元格的類型,上面我們讀取類型時(shí)獲取的是數(shù)字1,那1表示什么類型,又都有什么類型呢?別急下面我們通過(guò)一個(gè)表格展示下:
| 0 | empty | 空 |
| 1 | string | 字符串 |
| 2 | number | 數(shù)字 |
| 3 | date | 日期 |
| 4 | boolean | 布爾值 |
| 5 | error | 錯(cuò)誤 |
通過(guò)上面表格,我們可以知道剛獲取單元格類型返回的數(shù)字1對(duì)應(yīng)的就是字符串類型。
修改 excel
上面說(shuō)了寫(xiě)入和讀取 Excel 內(nèi)容,接下來(lái)我們就說(shuō)下更新修改 Excel 該如何操作,修改時(shí)就需要用到 xlutils 中的方法了。直接上代碼,來(lái)看下最簡(jiǎn)單的修改操作:
#?導(dǎo)入相應(yīng)模塊 import?xlrd from?xlutils.copy?import?copy#?打開(kāi)?excel?文件 readbook?=?xlrd.open_workbook("test_w.xls")#?復(fù)制一份 wb?=?copy(readbook)#?選取第一個(gè)表單 sh1?=?wb.get_sheet(0)#?在第五行新增寫(xiě)入數(shù)據(jù) sh1.write(4,?0,?'王歡') sh1.write(4,?1,?'通信工程') sh1.write(4,?2,?'機(jī)器學(xué)習(xí)') sh1.write(4,?3,?89)#?選取第二個(gè)表單 sh1?=?wb.get_sheet(1)#?替換總成績(jī)數(shù)據(jù) sh1.write(1,?0,?362)#?保存 wb.save('test.xls')從上面代碼可以看出,這里的修改 Excel 是通過(guò) xlutils 庫(kù)的 copy 方法將原來(lái)的 Excel 整個(gè)復(fù)制一份,然后再做修改操作,最后再保存。看下修改結(jié)果如下:
格式轉(zhuǎn)換操作
在平時(shí)我們使用 Excel 時(shí)會(huì)對(duì)數(shù)據(jù)進(jìn)行一下格式化,或者樣式設(shè)置,在這里把上面介紹寫(xiě)入的代碼簡(jiǎn)單修改下,使輸出的格式稍微改變一下,代碼如下:
#?導(dǎo)入?xlwt?庫(kù) import?xlwt#?設(shè)置寫(xiě)出格式字體紅色加粗 styleBR?=?xlwt.easyxf('font:?name?Times?New?Roman,?color-index?red,?bold?on')#?設(shè)置數(shù)字型格式為小數(shù)點(diǎn)后保留兩位 styleNum?=?xlwt.easyxf(num_format_str='#,##0.00')#?設(shè)置日期型格式顯示為YYYY-MM-DD styleDate?=?xlwt.easyxf(num_format_str='YYYY-MM-DD')#?創(chuàng)建?xls?文件對(duì)象 wb?=?xlwt.Workbook()#?新增兩個(gè)表單頁(yè) sh1?=?wb.add_sheet('成績(jī)') sh2?=?wb.add_sheet('匯總')#?然后按照位置來(lái)添加數(shù)據(jù),第一個(gè)參數(shù)是行,第二個(gè)參數(shù)是列 sh1.write(0,?0,?'姓名',?styleBR)???#?設(shè)置表頭字體為紅色加粗 sh1.write(0,?1,?'日期',?styleBR)???#?設(shè)置表頭字體為紅色加粗 sh1.write(0,?2,?'成績(jī)',?styleBR)???#?設(shè)置表頭字體為紅色加粗#?插入數(shù)據(jù) sh1.write(1,?0,?'張三',) sh1.write(1,?1,?'2020-07-01',?styleDate) sh1.write(1,?2,?90,?styleNum) sh1.write(2,?0,?'李四') sh1.write(2,?1,?'2020-08-02') sh1.write(2,?2,?95,?styleNum)#?設(shè)置單元格內(nèi)容居中的格式 alignment?=?xlwt.Alignment() alignment.horz?=?xlwt.Alignment.HORZ_CENTER style?=?xlwt.XFStyle() style.alignment?=?alignment#?合并A4,B4單元格,并將內(nèi)容設(shè)置為居中 sh1.write_merge(3,?3,?0,?1,?'總分',?style)#?通過(guò)公式,計(jì)算C2+C3單元格的和 sh1.write(3,?2,?xlwt.Formula("C2+C3"))#?對(duì)?sheet2?寫(xiě)入數(shù)據(jù) sh2.write(0,?0,?'總分',?styleBR) sh2.write(1,?0,?185)#?最后保存文件即可 wb.save('test.xls')輸出結(jié)果:
可以看出,使用代碼我們可以對(duì)字體,顏色、對(duì)齊、合并等平時(shí) Excel 的操作進(jìn)行設(shè)置,也可以格式化日期和數(shù)字類型的數(shù)據(jù)。當(dāng)然了這里只是介紹了部分功能,不過(guò)這已經(jīng)足夠我們?nèi)粘J褂昧?#xff0c;想了解更多功能操作可以參考官網(wǎng)。
python-excel官網(wǎng):www.python-excel.org/
Python 操作 Word
安裝 python-docx
處理 Word 需要用到 python-docx 庫(kù),目前版本為 0.8.10 ,執(zhí)行如下安裝命令:
$?pip?install?python-docx #################?運(yùn)行結(jié)果?################ C:\Users\Y>pip?install?python-docx Looking?in?indexes:?https://pypi.doubanio.com/simple Collecting?python-docxDownloading?https://pypi.doubanio.com/packages/e4/83/c66a1934ed5ed8ab1dbb9931f1779079f8bca0f6bbc5793c06c4b5e7d671/python-docx-0.8.10.tar.gz?(5.5MB)|████████████████████████████████|?5.5MB?3.2MB/s Requirement?already?satisfied:?lxml>=2.3.2?in?c:\users\y\appdata\local\programs\python\python37\lib\site-packages?(from?python-docx)?(4.5.0) Building?wheels?for?collected?packages:?python-docxBuilding?wheel?for?python-docx?(setup.py)?...?doneCreated?wheel?for?python-docx:?filename=python_docx-0.8.10-cp37-none-any.whl?size=184496?sha256=7ac76d3eec848a255b4f197d07e7b78ab33598c814d536d9b3c90b5a3e2a57fbStored?in?directory:?C:\Users\Y\AppData\Local\pip\Cache\wheels\05\7d\71\bb534b75918095724d0342119154c3d0fc035cedfe2f6c9a6c Successfully?built?python-docx Installing?collected?packages:?python-docx Successfully?installed?python-docx-0.8.10 復(fù)制代碼OK,如果提示以上信息則安裝成功。
寫(xiě)入 Word
平時(shí)我們?cè)诓僮?Word 寫(xiě)文檔的時(shí)候,一般分為幾部分:標(biāo)題、章節(jié)、段落、圖片、表格、引用以及項(xiàng)目符號(hào)編號(hào)等。下面我們就按這幾部分如何用 Python 操作來(lái)一一介紹。
標(biāo)題
文檔標(biāo)題創(chuàng)建比較簡(jiǎn)單,通過(guò) Document() 創(chuàng)建出一個(gè)空白文檔,只要調(diào)用 add_heading 方法就能創(chuàng)建標(biāo)題。
#?導(dǎo)入庫(kù) from?docx?import?Document from?docx.shared?import?Pt from?docx.shared?import?Inches from?docx.oxml.ns?import?qn#?新建空白文檔 doc1?=?Document()#?新增文檔標(biāo)題 doc1.add_heading('如何使用?Python?創(chuàng)建和操作?Word',0)#?保存文件 doc1.save('word1.docx')這樣就完成了創(chuàng)建文檔和文章標(biāo)題的操作,下面運(yùn)行程序,會(huì)生成名為 word1.docx 的文檔,打開(kāi)文章顯示如下圖所示:
章節(jié)與段落
有了文章標(biāo)題,下面我們來(lái)看章節(jié)和段落是怎么操作的,在上面代碼后面增加章節(jié)和段落操作的代碼如下:
#?導(dǎo)入庫(kù) from?docx?import?Document from?docx.shared?import?Pt from?docx.shared?import?Inches from?docx.oxml.ns?import?qn#?新建空白文檔 doc1?=?Document()#?新增文檔標(biāo)題 doc1.add_heading('如何使用?Python?創(chuàng)建和操作?Word',0)#?創(chuàng)建段落描述 doc1.add_paragraph('?Word?文檔在我們現(xiàn)在的生活和工作中都用的比較多,我們平時(shí)都使用?wps?或者?office?來(lái)對(duì)?Word?進(jìn)行處理,可能沒(méi)想過(guò)它可以用?Python?生成,下面我們就介紹具體如何操作……')#?創(chuàng)建一級(jí)標(biāo)題 doc1.add_heading('安裝?python-docx?庫(kù)',1)#?創(chuàng)建段落描述 doc1.add_paragraph('現(xiàn)在開(kāi)始我們來(lái)介紹如何安裝 python-docx 庫(kù),具體需要以下兩步操作:')#?創(chuàng)建二級(jí)標(biāo)題 doc1.add_heading('第一步:安裝 Python',2)#?創(chuàng)建段落描述 doc1.add_paragraph('在python官網(wǎng)下載python安裝包進(jìn)行安裝。')#?創(chuàng)建三級(jí)標(biāo)題 doc1.add_heading('第二步:安裝 python-docx 庫(kù)',3)#?創(chuàng)建段落描述 doc1.add_paragraph('window下win+R輸入CMD打開(kāi)命令行,輸入pip install python-docx即可下載。')#?保存文件 doc1.save('word2.docx')上面我們說(shuō)了 add_heading 方法用來(lái)增加文章標(biāo)題,不過(guò)通過(guò)上面代碼我們能知道,這個(gè)方法的第二個(gè)參數(shù)為數(shù)字,其實(shí)這個(gè)就是用來(lái)標(biāo)示幾級(jí)標(biāo)題的,在我們平時(shí)就用來(lái)標(biāo)示章節(jié)。add_paragraph 方法則是用來(lái)在文章中增加段落的, 運(yùn)行程序看下效果:
字體和引用
前面我們通過(guò) add_paragraph 方法增加了三個(gè)段落,現(xiàn)在我們就看下如何對(duì)段落中字體如何操作,以及引用段落的操作。繼續(xù)修改以上代碼,增加對(duì)文章字體字號(hào)、加粗、傾斜等操作,具體代碼如下:
#?導(dǎo)入庫(kù) from?docx?import?Document from?docx.shared?import?Pt from?docx.shared?import?Inches from?docx.oxml.ns?import?qn from?docx.shared?import?RGBColor#?新建空白文檔 doc1?=?Document()#?新增文檔標(biāo)題 doc1.add_heading('如何使用?Python?創(chuàng)建和操作?Word',0)#?創(chuàng)建段落描述 doc1.add_paragraph('?Word?文檔在我們現(xiàn)在的生活和工作中都用的比較多,我們平時(shí)都使用?wps?或者?office?來(lái)對(duì)?Word?進(jìn)行處理,可能沒(méi)想過(guò)它可以用?Python?生成,下面我們就介紹具體如何操作……')#?創(chuàng)建一級(jí)標(biāo)題 doc1.add_heading('安裝?python-docx?庫(kù)',1)#?創(chuàng)建段落描述 doc1.add_paragraph('現(xiàn)在開(kāi)始我們來(lái)介紹如何安裝 python-docx 庫(kù),具體需要以下兩步操作:')#?創(chuàng)建二級(jí)標(biāo)題 doc1.add_heading('第一步:安裝 Python',2)#?創(chuàng)建段落描述 doc1.add_paragraph('在python官網(wǎng)下載python安裝包進(jìn)行安裝。')#?創(chuàng)建三級(jí)標(biāo)題 doc1.add_heading('第二步:安裝 python-docx 庫(kù)',3)#?創(chuàng)建段落描述 doc1.add_paragraph('window下win+R輸入CMD打開(kāi)命令行,輸入pip install python-docx即可下載。')#?創(chuàng)建段落,添加文檔內(nèi)容 paragraph?=?doc1.add_paragraph('這是第二步的安裝描述!')#?段落中增加文字,并設(shè)置字體字號(hào) run?=?paragraph.add_run('(注意:這里設(shè)置了字號(hào)為20)') run.font.size?=?Pt(20)#?設(shè)置英文字體 run?=?doc1.add_paragraph('這里設(shè)置英文字體:').add_run('This?Font?is?Times?New?Roman?') run.font.name?=?'Times?New?Roman'#?設(shè)置中文字體 run?=?doc1.add_paragraph('這里設(shè)置中文字體:').add_run('當(dāng)前字體為黑體') run.font.name='黑體' r?=?run._element r.rPr.rFonts.set(qn('w:eastAsia'),?'黑體')#?設(shè)置斜體 run?=?doc1.add_paragraph('這段設(shè)置:').add_run('文字的是斜體?') run.italic?=?True#?設(shè)置粗體 run?=?doc1.add_paragraph('這段再設(shè)置:').add_run('這里設(shè)置粗體').bold?=?True#?設(shè)置字體帶下劃線 run?=?doc1.add_paragraph('這段為下劃線:').add_run('這里設(shè)置帶下劃線').underline?=?True#?設(shè)置字體顏色 run?=?doc1.add_paragraph('這段字體為紅色:').add_run('這里設(shè)置字體為紅色') run.font.color.rgb?=?RGBColor(0xFF,?0x00,?0x00)#?增加引用 doc1.add_paragraph('這里是我們引用的一段話:用Python改變?nèi)松?#xff0c;改變世界,FIGHTING。',?style='Intense?Quote')#?保存文件 doc1.save('word2.docx')上面代碼主要是針對(duì)段落字體的各種設(shè)置,每段代碼都標(biāo)有注釋?xiě)?yīng)該比較容易理解, 運(yùn)行程序看下效果:
項(xiàng)目列表
我們平時(shí)在使用 Word 時(shí),為了能展示更清晰,會(huì)用到項(xiàng)目符號(hào)和編號(hào),將內(nèi)容通過(guò)列表的方式展示出來(lái),下面我們新建一個(gè)文件 word1.py 并編寫(xiě)如下代碼:
#?導(dǎo)入庫(kù) from?docx?import?Document from?docx.shared?import?Pt from?docx.shared?import?Inches from?docx.oxml.ns?import?qn#?新建文檔 doc2?=?Document()doc2.add_paragraph('哪個(gè)不是動(dòng)物:')#?增加無(wú)序列表 doc2.add_paragraph('蘋(píng)果',?style='List?Bullet' ) doc2.add_paragraph('喜洋洋',?style='List?Bullet' ) doc2.add_paragraph('懶洋洋',?style='List?Bullet' ) doc2.add_paragraph('沸洋洋',?style='List?Bullet' ) doc2.add_paragraph('灰太狼',?style='List?Bullet' )doc2.add_paragraph('2020年度計(jì)劃:') #?增加有序列表 doc2.add_paragraph('CSDN達(dá)到博客專家',?style='List?Number' ) doc2.add_paragraph('每周健身三天',?style='List?Number' )doc2.add_paragraph('每天學(xué)習(xí)一個(gè)新知識(shí)點(diǎn)',?style='List?Number' ) doc2.add_paragraph('學(xué)習(xí)50本書(shū)',?style='List?Number' ) doc2.add_paragraph('減少加班時(shí)間',?style='List?Number' )#?保存文件 doc2.save('word1.docx')圖片和表格
我們平時(shí)編輯文章時(shí),插入圖片和表格也是經(jīng)常使用到的,那用 Python 該如何操作插入圖片和表格?首先我們隨便找了個(gè)圖片,我這用了 Python的logo 標(biāo)志圖,文件名為 python-logo.png,利用add_picture添加圖片;利用add_table添加表格,然后在 word1.py 文件中增加如下代碼:
#?導(dǎo)入庫(kù) from?docx?import?Document from?docx.shared?import?Pt from?docx.shared?import?Inches from?docx.oxml.ns?import?qn#?新建文檔 doc2?=?Document()doc2.add_paragraph('哪個(gè)不是動(dòng)物:')#?增加無(wú)序列表 doc2.add_paragraph('蘋(píng)果',?style='List?Bullet' ) doc2.add_paragraph('喜洋洋',?style='List?Bullet' ) doc2.add_paragraph('懶洋洋',?style='List?Bullet' ) doc2.add_paragraph('沸洋洋',?style='List?Bullet' ) doc2.add_paragraph('灰太狼',?style='List?Bullet' )doc2.add_paragraph('2020年度計(jì)劃:') #?增加有序列表 doc2.add_paragraph('CSDN達(dá)到博客專家',?style='List?Number' ) doc2.add_paragraph('每周健身三天',?style='List?Number' )doc2.add_paragraph('每天學(xué)習(xí)一個(gè)新知識(shí)點(diǎn)',?style='List?Number' ) doc2.add_paragraph('學(xué)習(xí)50本書(shū)',?style='List?Number' ) doc2.add_paragraph('減少加班時(shí)間',?style='List?Number' )doc2.add_heading('圖片',2)#?增加圖像 doc2.add_picture('C:/Users/Y/Pictures/python-logo.png',?width=Inches(5.5))doc2.add_heading('表格',2)#?增加表格,這是表格頭 table?=?doc2.add_table(rows=1,?cols=4) hdr_cells?=?table.rows[0].cells hdr_cells[0].text?=?'編號(hào)' hdr_cells[1].text?=?'姓名' hdr_cells[2].text?=?'職業(yè)'#?這是表格數(shù)據(jù) records?=?((1,?'張三',?'電工'),(2,?'張五',?'老板'),(3,?'馬六',?'IT'),(4,?'李四',?'工程師') )#?遍歷數(shù)據(jù)并展示 for?id,?name,?work?in?records:row_cells?=?table.add_row().cellsrow_cells[0].text?=?str(id)row_cells[1].text?=?namerow_cells[2].text?=?work#?手動(dòng)增加分頁(yè) doc2.add_page_break()#?保存文件 doc2.save('word1.docx')讀取 Word 文件
上面寫(xiě)了很多用 Python 創(chuàng)建空白 Word 文件格式化字體并保存到文件中,接下來(lái)我們?cè)俸?jiǎn)單介紹下如何讀取已有的 Word 文件,請(qǐng)看如下代碼:
#?引入庫(kù) from?docx?import?Document#?打開(kāi)文檔1 doc1?=?Document('word1.docx')#?讀取每段內(nèi)容 pl?=?[?paragraph.text?for?paragraph?in?doc1.paragraphs]print('######?輸出word1文章的內(nèi)容?######') #?輸出讀取到的內(nèi)容 for?i?in?pl:print(i)#?打開(kāi)文檔2 doc2?=?Document('word2.docx')print('\n######?輸出word2文章內(nèi)容?######')pl2?=?[?paragraph.text?for?paragraph?in?doc2.paragraphs]#?輸出讀取到的內(nèi)容 for?j?in?pl2:print(j)#?讀取表格材料,并輸出結(jié)果 tables?=?[table?for?table?in?doc2.tables] for?table?in?tables:for?row?in?table.rows:for?cell?in?row.cells:print?(cell.text,end='??')print()print('\n')以上代碼是將之前我們輸出的兩個(gè)文檔內(nèi)容都讀取出來(lái),當(dāng)然這里只是打印到控制臺(tái),并沒(méi)有做其他處理。現(xiàn)在我們執(zhí)行看下結(jié)果:
Python 操作 CSV
簡(jiǎn)介
CSV
CSV 全稱 Comma-Separated Values,中文叫逗號(hào)分隔值或字符分隔值,它以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本),其本質(zhì)就是一個(gè)字符序列,可以由任意數(shù)目的記錄組成,記錄之間以某種換行符分隔,每條記錄由字段組成,通常所有記錄具有完全相同的字段序列,字段間常用逗號(hào)或制表符進(jìn)行分隔。CSV 文件格式簡(jiǎn)單、通用,在現(xiàn)實(shí)中有著廣泛的應(yīng)用,其中使用最多的是在程序之間轉(zhuǎn)移表格數(shù)據(jù)。
CSV 與 Excel
因?yàn)?CSV 文件與 Excel 文件默認(rèn)都是用 Excel 工具打開(kāi),那他們有什么區(qū)別呢?我們通過(guò)下表簡(jiǎn)單了解一下。
| 文件后綴為 .csv | 文件后綴為 .xls 或 .xlsx |
| 純文本文件 | 二進(jìn)制文件 |
| 存儲(chǔ)數(shù)據(jù)不包含格式、公式等 | 不僅可以存儲(chǔ)數(shù)據(jù),還可以對(duì)數(shù)據(jù)進(jìn)行操作 |
| 可以通過(guò) Excel 工具打開(kāi),也可以通過(guò)文本編輯器打開(kāi) | 只能通過(guò) Excel 工具打開(kāi) |
| 只能編寫(xiě)一次列標(biāo)題 | 每一行中的每一列都有一個(gè)開(kāi)始標(biāo)記和結(jié)束標(biāo)記 |
| 導(dǎo)入數(shù)據(jù)時(shí)消耗內(nèi)存較少 | 數(shù)據(jù)時(shí)消耗內(nèi)存較多 |
基本使用
Python 通過(guò) csv 模塊來(lái)實(shí)現(xiàn) CSV 格式文件中數(shù)據(jù)的讀寫(xiě),該模塊提供了兼容 Excel 方式輸出、讀取數(shù)據(jù)文件的功能,這樣我們無(wú)需知道 Excel 所采用 CSV 格式的細(xì)節(jié),同樣的它還可以定義其他應(yīng)用程序可用的或特定需求的 CSV 格式。
csv 模塊中使用 reader 類和 writer 類讀寫(xiě)序列化的數(shù)據(jù),使用 DictReader 類和 DictWriter 類以字典的形式讀寫(xiě)數(shù)據(jù),下面來(lái)詳細(xì)看一下相應(yīng)功能。首先來(lái)看一下 csv 模塊常量信息,如下所示:
| QUOTE_ALL | 指示 writer 對(duì)象給所有字段加上引號(hào) |
| QUOTE_MINIMAL | 指示 writer 對(duì)象僅為包含特殊字符(如:定界符、引號(hào)字符、行結(jié)束符等)的字段加上引號(hào) |
| QUOTE_NONNUMERIC | 指示 writer 對(duì)象為所有非數(shù)字字段加上引號(hào) |
| QUOTE_NONE | 指示 writer 對(duì)象不使用引號(hào)引出字段 |
writer(csvfile, dialect=’excel’, **fmtparams)
返回一個(gè) writer 對(duì)象,該對(duì)象負(fù)責(zé)將用戶的數(shù)據(jù)在給定的文件類對(duì)象上轉(zhuǎn)換為帶分隔符的字符串。
csvfile 可以是具有 write() 方法的任何對(duì)象,如果 csvfile 是文件對(duì)象,則使用 newline=’’ 打開(kāi);
可選參數(shù) dialect 是用于不同的 CSV 變種的特定參數(shù)組;
可選關(guān)鍵字參數(shù) fmtparams 可以覆寫(xiě)當(dāng)前變種格式中的單個(gè)格式設(shè)置。
看下示例:
import?csvwith?open('test.csv',?'w',?newline='')?as?csvfile:writer?=?csv.writer(csvfile)writer.writerow(['id',?'name',?'age'])#?寫(xiě)入多行data?=?[('1001',?'張三',?'21'),?('1002',?'李四',?'31')]writer.writerows(data)reader(csvfile, dialect=’excel’, **fmtparams)
返回一個(gè) reader 對(duì)象,該對(duì)象將逐行遍歷 csvfile,csvfile 可以是文件對(duì)象和列表對(duì)象,如果是文件對(duì)象要使用 newline=’’ 打開(kāi)。看下示例:
import?csvwith?open('test.csv',?newline='')?as?csvfile:reader?=?csv.reader(csvfile,?delimiter='?')for?row?in?reader:print(',?'.join(row))Sniffer 類
用于推斷 CSV 文件的格式,該類提供了如下兩個(gè)方法:
sniff(sample, delimiters=None)
分析給定的 sample,如果給出可選的 delimiters 參數(shù),則該參數(shù)會(huì)被解釋為字符串,該字符串包含了可能的有效定界符。
has_header(sample)
分析示例文本(假定為 CSV 格式),如果第一行很可能是一系列列標(biāo)題,則返回 True。
該類及方法使用較少,了解即可,下面通過(guò)一個(gè)示例簡(jiǎn)單了解一下。
import?csvwith?open('test.csv',?newline='')?as?csvfile:dialect?=?csv.Sniffer().sniff(csvfile.read(1024))csvfile.seek(0)reader?=?csv.reader(csvfile,?dialect)for?row?in?reader:print(row)Reader 對(duì)象
Reader 對(duì)象指 DictReader 實(shí)例和 reader() 函數(shù)返回的對(duì)象,下面看一下其公開(kāi)屬性和方法。
next()
返回 reader 的可迭代對(duì)象的下一行,返回值可能是列表或字典。
dialect
dialect 描述,只讀,供解析器使用。
line_num
源迭代器已經(jīng)讀取了的行數(shù)。
fieldnames
字段名稱,該屬性為 DictReader 對(duì)象屬性。
Writer 對(duì)象
Writer 對(duì)象指 DictWriter 實(shí)例和 writer() 函數(shù)返回的對(duì)象,下面看一下其公開(kāi)屬性和方法。
writerow(row)
將參數(shù) row 寫(xiě)入 writer 的文件對(duì)象。
writerows(rows)
將 rows_(即能迭代出多個(gè)上述_ row 對(duì)象的迭代器)中的所有元素寫(xiě)入 writer 的文件對(duì)象。
writeheader()
在 writer 的文件對(duì)象中,寫(xiě)入一行字段名稱,該方法為 DictWriter 對(duì)象方法。
dialect
dialect 描述,只讀,供 writer 使用。
寫(xiě)讀追加狀態(tài)
'r':讀 'w':寫(xiě) 'a':追加 'r+'?==?r+w(可讀可寫(xiě),文件若不存在就報(bào)錯(cuò)(IOError)) 'w+'?==?w+r(可讀可寫(xiě),文件若不存在就創(chuàng)建) 'a+'?==a+r(可追加可寫(xiě),文件若不存在就創(chuàng)建) 對(duì)應(yīng)的,如果是二進(jìn)制文件,就都加一個(gè)b就好啦: 'rb'??'wb'??'ab'??'rb+'??'wb+'??'ab+萬(wàn)水千山總是情,點(diǎn)個(gè)??????行不行。推薦閱讀:入門(mén):?最全的零基礎(chǔ)學(xué)Python的問(wèn)題? |?零基礎(chǔ)學(xué)了8個(gè)月的Python??|?實(shí)戰(zhàn)項(xiàng)目?|學(xué)Python就是這條捷徑量化:?定投基金到底能賺多少錢(qián)?? |?我用Python對(duì)去年800只基金的數(shù)據(jù)分析??干貨:爬取豆瓣短評(píng),電影《后來(lái)的我們》?|?38年NBA最佳球員分析?|? ?從萬(wàn)眾期待到口碑撲街!唐探3令人失望? |?笑看新倚天屠龍記?|?燈謎答題王?|用Python做個(gè)海量小姐姐素描圖?|碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影趣味:彈球游戲? |?九宮格? |?漂亮的花?|?兩百行Python《天天酷跑》游戲!AI:?會(huì)做詩(shī)的機(jī)器人?|?給圖片上色?|?預(yù)測(cè)收入?|?碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影小工具:?Pdf轉(zhuǎn)Word,輕松搞定表格和水印!?|?一鍵把html網(wǎng)頁(yè)保存為pdf!|??再見(jiàn)PDF提取收費(fèi)!?|?用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換?|?制作一款釘釘?shù)蛢r(jià)機(jī)票提示器!?|60行代碼做了一個(gè)語(yǔ)音壁紙切換器天天看小姐姐!|年度爆款文案1).臥槽!Pdf轉(zhuǎn)Word用Python輕松搞定!2).學(xué)Python真香!我用100行代碼做了個(gè)網(wǎng)站,幫人PS旅行圖片,賺個(gè)雞腿吃3).首播過(guò)億,火爆全網(wǎng),我分析了《乘風(fēng)破浪的姐姐》,發(fā)現(xiàn)了這些秘密?4).80行代碼!用Python做一個(gè)哆來(lái)A夢(mèng)分身?5).你必須掌握的20個(gè)python代碼,短小精悍,用處無(wú)窮?6).30個(gè)Python奇淫技巧集?7).我總結(jié)的80頁(yè)《菜鳥(niǎo)學(xué)Python精選干貨.pdf》,都是干貨?8).再見(jiàn)Python!我要學(xué)Go了!2500字深度分析!9).發(fā)現(xiàn)一個(gè)舔狗福利!這個(gè)Python爬蟲(chóng)神器太爽了,自動(dòng)下載妹子圖片點(diǎn)閱讀原文,領(lǐng)AI全套資料!總結(jié)
以上是生活随笔為你收集整理的教你如何用Python轻轻松松操作Excel、Word、CSV,一文就够了,赶紧码住!!!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在load事件中关闭窗体
- 下一篇: python 波形发生_事件与信号