一文教你如何用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 的開放接口,這些都是比較常用的工具,還有其他一些優(yōu)秀的工具這里就不一一介紹,接下來我們通過一個(gè)表格展示各工具之間的特點(diǎn):
類型 | xlrd&xlwt&xlutils | XlsxWriter | OpenPyXL | Excel開放接口 |
---|---|---|---|---|
讀取 | 支持 | 不支持 | 支持 | 支持 |
寫入 | 支持 | 支持 | 支持 | 支持 |
修改 | 支持 | 不支持 | 支持 | 支持 |
xls | 支持 | 不支持 | 不支持 | 支持 |
xlsx | 高版本 | 支持 | 支持 | 支持 |
大文件 | 不支持 | 支持 | 支持 | 不支持 |
效率 | 快 | 快 | 快 | 超慢 |
功能 | 較弱 | 強(qiáng)大 | 一般 | 超強(qiáng)大 |
以上可以根據(jù)需求不同,選擇合適的工具,現(xiàn)在為大家主要介紹下最常用的 xlrd & xlwt & xlutils 系列工具的使用。
xlrd & xlwt & xlutils 介紹
xlrd&xlwt&xlutils 是由以下三個(gè)庫組成:
- xlrd:用于讀取 Excel 文件;
- xlwt:用于寫入 Excel 文件;
- xlutils:用于操作 Excel 文件的實(shí)用工具,比如復(fù)制、分割、篩選等;
安裝庫
安裝比較簡(jiǎn)單,直接用 pip 工具安裝三個(gè)庫即可,安裝命令如下:
$ pip install xlrd xlwt xlutils
寫入 Excel
接下來我們就從寫入 Excel 開始,話不多說直接看代碼如下:
# 導(dǎo)入 xlwt 庫 import xlwt # 創(chuàng)建 xls 文件對(duì)象 wb = xlwt.Workbook() # 新增兩個(gè)表單頁 sh1 = wb.add_sheet('成績(jī)') sh2 = wb.add_sheet('匯總') # 然后按照位置來添加數(shù)據(jù),第一個(gè)參數(shù)是行,第二個(gè)參數(shù)是列 # 寫入第一個(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) # 寫入第二個(gè)sheet sh2.write(0, 0, '總分') sh2.write(1, 0, 273) # 最后保存文件即可 wb.save('test.xls')
運(yùn)行代碼,結(jié)果會(huì)看到生成名為 test.xls 的 Excel 文件,打開文件查看如下圖所示:
以上就是寫入 Excel 的代碼,是不是很簡(jiǎn)單,下面我們?cè)賮砜聪伦x取 Excel 該如何操作。
讀取 Excel
讀取 Excel 其實(shí)也不難,請(qǐng)看如下代碼:
# 導(dǎo)入 xlrd 庫 import xlrd # 打開剛才我們寫入的 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表示什么類型,又都有什么類型呢?別急下面我們通過一個(gè)表格展示下:
數(shù)值 | 類型 | 說明 |
---|---|---|
0 | empty | 空 |
1 | string | 字符串 |
2 | number | 數(shù)字 |
3 | date | 日期 |
4 | boolean | 布爾值 |
5 | error | 錯(cuò)誤 |
通過上面表格,我們可以知道剛獲取單元格類型返回的數(shù)字1對(duì)應(yīng)的就是字符串類型。
修改 excel
上面說了寫入和讀取 Excel 內(nèi)容,接下來我們就說下更新修改 Excel 該如何操作,修改時(shí)就需要用到 xlutils 中的方法了。直接上代碼,來看下最簡(jiǎn)單的修改操作:
# 導(dǎo)入相應(yīng)模塊 import xlrd from xlutils.copy import copy # 打開 excel 文件 readbook = xlrd.open_workbook("test_w.xls") # 復(fù)制一份 wb = copy(readbook) # 選取第一個(gè)表單 sh1 = wb.get_sheet(0) # 在第五行新增寫入數(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 是通過 xlutils 庫的 copy 方法將原來的 Excel 整個(gè)復(fù)制一份,然后再做修改操作,最后再保存。 看下修改結(jié)果如下:
格式轉(zhuǎn)換操作
在平時(shí)我們使用 Excel 時(shí)會(huì)對(duì)數(shù)據(jù)進(jìn)行一下格式化,或者樣式設(shè)置,在這里把上面介紹寫入的代碼簡(jiǎn)單修改下,使輸出的格式稍微改變一下,代碼如下:
# 導(dǎo)入 xlwt 庫 import xlwt # 設(shè)置寫出格式字體紅色加粗 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è)表單頁 sh1 = wb.add_sheet('成績(jī)') sh2 = wb.add_sheet('匯總') # 然后按照位置來添加數(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) # 通過公式,計(jì)算C2+C3單元格的和 sh1.write(3, 2, xlwt.Formula("C2+C3")) # 對(duì) sheet2 寫入數(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)然了這里只是介紹了部分功能,不過這已經(jīng)足夠我們?nèi)粘J褂昧?,想了解更多功能操作可以參考官網(wǎng)。
python-excel官網(wǎng):www.python-excel.org/
Python 操作 Word
安裝 python-docx
處理 Word 需要用到 python-docx 庫,目前版本為 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-docx Downloading 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-docx Building wheel for python-docx (setup.py) ... done Created wheel for python-docx: filename=python_docx-0.8.10-cp37-none-any.whl size=184496 sha256=7ac76d3eec848a255b4f197d07e7b78ab33598c814d536d9b3c90b5a3e2a57fb Stored 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
OK,如果提示以上信息則安裝成功。
寫入 Word
平時(shí)我們?cè)诓僮?Word 寫文檔的時(shí)候,一般分為幾部分:標(biāo)題、章節(jié)、段落、圖片、表格、引用以及項(xiàng)目符號(hào)編號(hào)等。下面我們就按這幾部分如何用 Python 操作來一一介紹。
標(biāo)題
文檔標(biāo)題創(chuàng)建比較簡(jiǎn)單,通過 Document() 創(chuàng)建出一個(gè)空白文檔,只要調(diào)用 add_heading 方法就能創(chuàng)建標(biāo)題。
# 導(dǎo)入庫 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 的文檔,打開文章顯示如下圖所示:
章節(jié)與段落
有了文章標(biāo)題,下面我們來看章節(jié)和段落是怎么操作的,在上面代碼后面增加章節(jié)和段落操作的代碼如下:
# 導(dǎo)入庫 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 來對(duì) Word 進(jìn)行處理,可能沒想過它可以用 Python 生成,下面我們就介紹具體如何操作……') # 創(chuàng)建一級(jí)標(biāo)題 doc1.add_heading('安裝 python-docx 庫',1) # 創(chuàng)建段落描述 doc1.add_paragraph('現(xiàn)在開始我們來介紹如何安裝 python-docx 庫,具體需要以下兩步操作:') # 創(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 庫',3) # 創(chuàng)建段落描述 doc1.add_paragraph('window下win+R輸入CMD打開命令行,輸入pip install python-docx即可下載。') # 保存文件 doc1.save('word2.docx')
上面我們說了 add_heading 方法用來增加文章標(biāo)題,不過通過上面代碼我們能知道,這個(gè)方法的第二個(gè)參數(shù)為數(shù)字,其實(shí)這個(gè)就是用來標(biāo)示幾級(jí)標(biāo)題的,在我們平時(shí)就用來標(biāo)示章節(jié)。add_paragraph 方法則是用來在文章中增加段落的, 運(yùn)行程序看下效果:
字體和引用
前面我們通過 add_paragraph 方法增加了三個(gè)段落,現(xiàn)在我們就看下如何對(duì)段落中字體如何操作,以及引用段落的操作。繼續(xù)修改以上代碼,增加對(duì)文章字體字號(hào)、加粗、傾斜等操作,具體代碼如下:
# 導(dǎo)入庫 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 來對(duì) Word 進(jìn)行處理,可能沒想過它可以用 Python 生成,下面我們就介紹具體如何操作……') # 創(chuàng)建一級(jí)標(biāo)題 doc1.add_heading('安裝 python-docx 庫',1) # 創(chuàng)建段落描述 doc1.add_paragraph('現(xiàn)在開始我們來介紹如何安裝 python-docx 庫,具體需要以下兩步操作:') # 創(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 庫',3) # 創(chuàng)建段落描述 doc1.add_paragraph('window下win+R輸入CMD打開命令行,輸入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)松?,改變世界,F(xiàn)IGHTING。', style='Intense Quote') # 保存文件 doc1.save('word2.docx')
上面代碼主要是針對(duì)段落字體的各種設(shè)置,每段代碼都標(biāo)有注釋應(yīng)該比較容易理解, 運(yùn)行程序看下效果:
項(xiàng)目列表
我們平時(shí)在使用 Word 時(shí),為了能展示更清晰,會(huì)用到項(xiàng)目符號(hào)和編號(hào),將內(nèi)容通過列表的方式展示出來,下面我們新建一個(gè)文件 word1.py 并編寫如下代碼:
# 導(dǎo)入庫 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)物:') # 增加無序列表 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( '灰太狼', 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本書', 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)入庫 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)物:') # 增加無序列表 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( '灰太狼', 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本書', 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().cells row_cells[0].text = str(id) row_cells[1].text = name row_cells[2].text = work # 手動(dòng)增加分頁 doc2.add_page_break() # 保存文件 doc2.save('word1.docx')
讀取 Word 文件
上面寫了很多用 Python 創(chuàng)建空白 Word 文件格式化字體并保存到文件中,接下來我們?cè)俸?jiǎn)單介紹下如何讀取已有的 Word 文件,請(qǐng)看如下代碼:
# 引入庫 from docx import Document # 打開文檔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) # 打開文檔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)容都讀取出來,當(dāng)然這里只是打印到控制臺(tái),并沒有做其他處理?,F(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 工具打開,那他們有什么區(qū)別呢?我們通過下表簡(jiǎn)單了解一下。
基本使用
Python 通過 csv 模塊來實(shí)現(xiàn) CSV 格式文件中數(shù)據(jù)的讀寫,該模塊提供了兼容 Excel 方式輸出、讀取數(shù)據(jù)文件的功能,這樣我們無需知道 Excel 所采用 CSV 格式的細(xì)節(jié),同樣的它還可以定義其他應(yīng)用程序可用的或特定需求的 CSV 格式。
csv 模塊中使用 reader 類和 writer 類讀寫序列化的數(shù)據(jù),使用 DictReader 類和 DictWriter 類以字典的形式讀寫數(shù)據(jù),下面來詳細(xì)看一下相應(yīng)功能。首先來看一下 csv 模塊常量信息,如下所示:
writer(csvfile, dialect=’excel’, **fmtparams)
返回一個(gè) writer 對(duì)象,該對(duì)象負(fù)責(zé)將用戶的數(shù)據(jù)在給定的文件類對(duì)象上轉(zhuǎn)換為帶分隔符的字符串。
- csvfile 可以是具有 write() 方法的任何對(duì)象,如果 csvfile 是文件對(duì)象,則使用 newline=’’ 打開;
- 可選參數(shù) dialect 是用于不同的 CSV 變種的特定參數(shù)組;
- 可選關(guān)鍵字參數(shù) fmtparams 可以覆寫當(dāng)前變種格式中的單個(gè)格式設(shè)置。
看下示例:
import csv with open('test.csv', 'w', newline='') as csvfile: writer = csv.writer(csvfile) writer.writerow(['id', 'name', 'age']) # 寫入多行 data = [('1001', '張三', '21'), ('1002', '李四', '31')] writer.writerows(data)
reader(csvfile, dialect=’excel’, **fmtparams)
返回一個(gè) reader 對(duì)象,該對(duì)象將逐行遍歷 csvfile,csvfile 可以是文件對(duì)象和列表對(duì)象,如果是文件對(duì)象要使用 newline=’’ 打開??聪率纠?/p>
import csv with 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。
該類及方法使用較少,了解即可,下面通過一個(gè)示例簡(jiǎn)單了解一下。
import csv with 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ì)象,下面看一下其公開屬性和方法。
next()
返回 reader 的可迭代對(duì)象的下一行,返回值可能是列表或字典。
dialect
dialect 描述,只讀,供解析器使用。
line_num
源迭代器已經(jīng)讀取了的行數(shù)。
fieldnames
字段名稱,該屬性為 DictReader 對(duì)象屬性。
Writer 對(duì)象
Writer 對(duì)象指 DictWriter 實(shí)例和 writer() 函數(shù)返回的對(duì)象,下面看一下其公開屬性和方法。
writerow(row)
將參數(shù) row 寫入 writer 的文件對(duì)象。
writerows(rows)
將 rows*(即能迭代出多個(gè)上述 *row 對(duì)象的迭代器)中的所有元素寫入 writer 的文件對(duì)象。
writeheader()
在 writer 的文件對(duì)象中,寫入一行字段名稱,該方法為 DictWriter 對(duì)象方法。
dialect
dialect 描述,只讀,供 writer 使用。
寫讀追加狀態(tài)
'r':讀
'w':寫
'a':追加
'r+' == r+w(可讀可寫,文件若不存在就報(bào)錯(cuò)(IOError))
'w+' == w+r(可讀可寫,文件若不存在就創(chuàng)建)
'a+' ==a+r(可追加可寫,文件若不存在就創(chuàng)建)
對(duì)應(yīng)的,如果是二進(jìn)制文件,就都加一個(gè)b就好啦:
'rb' 'wb' 'ab' 'rb+' 'wb+' 'ab+'
以上就是一文教你如何用Python輕輕松松操作Excel,Word,CSV的詳細(xì)內(nèi)容,更多關(guān)于Python操作Excel Word CSV的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- python使用pywinauto驅(qū)動(dòng)微信客戶端實(shí)現(xiàn)公眾號(hào)爬蟲
- python+pywinauto+lackey實(shí)現(xiàn)PC端exe自動(dòng)化的示例代碼
- python實(shí)現(xiàn)按鍵精靈找色點(diǎn)擊功能教程,使用pywin32和Pillow庫
- PythonPC客戶端自動(dòng)化實(shí)現(xiàn)原理(pywinauto)
- Python辦公自動(dòng)化從Excel中計(jì)算整理數(shù)據(jù)并寫入Word
- Python辦公自動(dòng)化Word轉(zhuǎn)Excel文件批量處理
- 利用Python實(shí)現(xiàn)讀取Word表格計(jì)算匯總并寫入Excel
- 使用Python自動(dòng)化Microsoft Excel和Word的操作方法
- Python實(shí)現(xiàn)Word表格轉(zhuǎn)成Excel表格的示例代碼
- Python?pywin32實(shí)現(xiàn)word與Excel的處理
相關(guān)文章
Python的爬蟲包Beautiful Soup中用正則表達(dá)式來搜索
這篇文章主要介紹了Python的爬蟲包Beautiful Soup中用正則表達(dá)式來搜索的技巧,包括使用正則表達(dá)式去搜索多種可能的關(guān)鍵字以及查找屬性值未知的標(biāo)簽等,需要的朋友可以參考下2016-01-01DJango的創(chuàng)建和使用詳解(默認(rèn)數(shù)據(jù)庫sqlite3)
今天小編就為大家分享一篇DJango的創(chuàng)建和使用詳解(默認(rèn)數(shù)據(jù)庫sqlite3),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11python的scipy.stats模塊中正態(tài)分布常用函數(shù)總結(jié)
在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python的scipy.stats模塊中正態(tài)分布常用函數(shù)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。2021-02-02python實(shí)現(xiàn)異常信息堆棧輸出到日志文件
今天小編就為大家分享一篇python實(shí)現(xiàn)異常信息堆棧輸出到日志文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12使用Python編寫電腦定時(shí)關(guān)機(jī)小程序
這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫電腦定時(shí)關(guān)機(jī)小程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01用Python解析身份證號(hào)獲取年齡和性別的實(shí)現(xiàn)方法
身份證號(hào)碼包含了豐富的信息,包括生日和性別,Python提供了處理和解析身份證號(hào)的功能,讓我們能夠從中提取出相關(guān)的信息,本文將介紹如何利用Python解析身份證號(hào),獲取持有者的年齡和性別信息,感興趣的朋友可以參考下2023-12-12python實(shí)現(xiàn)nao機(jī)器人身體軀干和腿部動(dòng)作操作
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)nao機(jī)器人身體軀干和腿部動(dòng)作操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04selenium設(shè)置瀏覽器為headless無頭模式(Chrome和Firefox)
這篇文章主要介紹了selenium設(shè)置瀏覽器為headless無頭模式(Chrome和Firefox),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01python神經(jīng)網(wǎng)絡(luò)VGG16模型復(fù)現(xiàn)及其如何預(yù)測(cè)詳解
這篇文章主要為大家介紹了VGG16模型的復(fù)現(xiàn)及其詳解(包含如何預(yù)測(cè)),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05