Python -- xlrd,xlwt,xlutils 讀寫同一個Excel

?

最近開始學習python,想做做簡單的自動化測試,需要讀寫excel,然后就找到了xlrd來讀取Excel文件,使用xlwt來生成Excel文件(可以控制Excel中單元格的格式),需要注意的是,用xlrd讀取excel是不能對其進行操作的:xlrd.open_workbook()方法返回xlrd.Book類型,是只讀的,不能對其進行操作。而xlwt.Workbook()返回的xlwt.Workbook類型的save(filepath)方法可以保存excel文件。

?因此對于讀取和生成Excel文件都非常容易處理,但是對于已經存在的Excel文件進行修改就比較麻煩了。不過,還有一個xlutils(依賴于xlrd和xlwt)提供復制excel文件內容和修改文件的功能。其實際也只是在xlrd.Book和xlwt.Workbook之間建立了一個管道而已.

?

一、操作Excel 常用方法

?xlrd,xlwt,xlutils一套工具,xlrd是用來讀取excl的,xlwt是用來寫入excel的

? ? ? ? ? ? xlutils,引用了xlrd和xlwt來做一些如合并,過濾,修改文件的操作,這個很多人推薦使用,但有一個缺陷,就是,他的一個

? ? ? ? ? ?工作表sheet只能寫入65535行,多了就不能寫了,解決方法可以是,每65535行新建一個工作表sheet或者向后移動幾列,

? ? ? ? ? 然后寫入,他的列最大值為256,所以最多一個sheet文件可以寫入:256 * 65535 個數據,還有就是只能讀xlsx文件,不能寫xlsx文件。

? ? ? ? ?對于xlsx文件的操作見 ?Python - openpyxl 讀寫操作Excel?介紹。

# -*- coding: utf-8 -*-
#導入xlwt模塊
import xlwt
# 創建一個Workbook對象,這就相當于創建了一個Excel文件
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
'''
Workbook類初始化時有encoding和style_compression參數
encoding:設置字符編碼,一般要這樣設置:w = Workbook(encoding='utf-8'),就可以在excel中輸出中文了。
默認是ascii。當然要記得在文件頭部添加:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
style_compression:表示是否壓縮,不常用。
'''
#創建一個sheet對象,一個sheet對象對應Excel文件中的一張表格。
# 在電腦桌面右鍵新建一個Excel文件,其中就包含sheet1,sheet2,sheet3三張表
sheet = book.add_sheet('test', cell_overwrite_ok=True)
# 其中的test是這張表的名字,cell_overwrite_ok,表示是否可以覆蓋單元格,其實是Worksheet實例化的一個參數,默認值是False
# 向表test中添加數據
sheet.write(0, 0, 'EnglishName')  # 其中的'0-行, 0-列'指定表中的單元,'EnglishName'是向該單元寫入的內容
sheet.write(1, 0, 'Marcovaldo')
txt1 = '中文名字'
sheet.write(0, 1, txt1.decode('utf-8'))  # 此處需要將中文字符串解碼成unicode碼,否則會報錯
txt2 = '馬可瓦多'
sheet.write(1, 1, txt2.decode('utf-8'))# 最后,將以上操作保存到指定的Excel文件中
book.save(r'e:\test1.xls')  # 在字符串前加r,聲明為raw字符串,這樣就不會處理其中的轉義了。否則,可能會報錯

?

# -*- coding: utf-8 -*-
import xlrd
xlsfile = r"C:\Users\Administrator\Desktop\test\Account.xls"# 打開指定路徑中的xls文件
book = xlrd.open_workbook(xlsfile)#得到Excel文件的book對象,實例化對象
sheet0 = book.sheet_by_index(0) # 通過sheet索引獲得sheet對象
print "1、",sheet0
sheet_name = book.sheet_names()[0]# 獲得指定索引的sheet表名字
print "2、",sheet_name
sheet1 = book.sheet_by_name(sheet_name)# 通過sheet名字來獲取,當然如果知道sheet名字就可以直接指定
nrows = sheet0.nrows    # 獲取行總數
print "3、",nrows
#循環打印每一行的內容
for i in range(nrows):print sheet1.row_values(i)
ncols = sheet0.ncols    #獲取列總數
print "4、",ncols
row_data = sheet0.row_values(0)     # 獲得第1行的數據列表
print row_data
col_data = sheet0.col_values(0)     # 獲得第1列的數據列表
print "5、",col_data
# 通過坐標讀取表格中的數據
cell_value1 = sheet0.cell_value(0, 0)
print "6、",cell_value1
cell_value2 = sheet0.cell_value(0, 1)
print "7、",cell_value2

??

二、Excel操作實例

#-*-coding:utf-8-*-
# Time:2017/9/20 20:13
# Author:YangYangJunimport xlrd,xlwt,xlutils
import os
import time
from xlutils.copy import copy'''
導入 excel操作的三個模塊
xlrd  讀取操作
xlwt  寫入操作
xlutils 復制、剪切、粘貼等操作'''#獲取當前文件路徑
currntPath = os.getcwd()
print currntPath
#D:\WorkSpace\Python\Study\Selenium\PyExcel#獲取excel文件路徑
excelPath = os.path.join(os.getcwd(),'ExcelData')
print excelPath
#D:\WorkSpace\Python\Study\Selenium\PyExcel\ExcelData#遍歷獲取文件名
excelPathDir = os.listdir(excelPath)
print excelPathDir
#['PyExcel.xlsx']
#excel與程序在同一目錄下,可以直接數據文件名。#excelName = 'PyExcel.xlsx'#如果不在一個目錄下,最好填寫絕對路徑#excelName = os.path.join(excelPath,'PyExcel.xlsx')
excelName = os.path.join(excelPath,excelPathDir.pop())
print  excelName
#D:\WorkSpace\Python\Study\Selenium\PyExcel\ExcelData\PyExcel.xlsx

ReadExcel = xlrd.open_workbook(excelName)print ReadExcel.sheet_names()
# 返回的是sheet頁list [u'userInfo', u'tests']

?

讀取excel根據條件修改對應表格內容,并保存。

原始表格:

?

?

?

代碼實例:

#-*-coding:utf-8-*-
# Time:2017/9/20 20:13
# Author:YangYangJunimport xlrd,xlwt,xlutils
import os
import time
#導入copy 方法方便文件寫操作。
from xlutils.copy import copy'''
導入 excel操作的三個模塊
xlrd  讀取操作
xlwt  寫入操作
xlutils 復制、剪切、粘貼等操作'''def OpenXlxs():xlsxPath = os.path.join(os.getcwd(),'ExcelData')xlsxPathDir = os.listdir(xlsxPath)xlsxName = os.path.join(xlsxPath,xlsxPathDir.pop())print xlsxNamereadOpenXlsx = xlrd.open_workbook(xlsxName)readXlsxSheet = readOpenXlsx.sheet_by_name('userInfo')# copy管道作用writeOpenXlsx = copy(readOpenXlsx)print readXlsxSheet,writeOpenXlsx,xlsxNamereturn readXlsxSheet,writeOpenXlsx,xlsxNamedef readXlsx(readXlsxSheet, writeOpenXlsx, xlsxName):#獲取行數print "***"rowMax = readXlsxSheet.nrowsprint rowMax # 4#獲取第一行的值rows = readXlsxSheet.row_values(0)print rows#獲取列數colMax = readXlsxSheet.ncolsprint colMax   # 8for r in range(rowMax):if r == 0:continueelse:rows = readXlsxSheet.row_values(r)print rowsRunValue = readXlsxSheet.cell(r,6).valueif RunValue == 'Y':writeXlsx(writeOpenXlsx,r,xlsxName)def writeXlsx(writeOpenXlsx,row,xlsxName):# 前面已經通過 copy 方法獲取了writeOpenXlsx# 通過get_sheet()獲取的sheet有write()方法writeXlsxSheet = writeOpenXlsx.get_sheet(0)modifyTime = time.strftime('%Y-%m-%d')print modifyTimewriteXlsxSheet.write(row,4,modifyTime)writeXlsxSheet.write(row,7,'Pass')writeOpenXlsx.save(xlsxName)if __name__ == '__main__':readXlsxSheet, writeOpenXlsx, xlsxName = OpenXlxs()readXlsx(readXlsxSheet, writeOpenXlsx, xlsxName)

?

?運行代碼后文件

?

?打開時報如圖信息

?

此時修改一下文件后綴名即可打開,修改為xls即可。運行結果如圖,根據條件修改了相應行的值。

?

?

另外一種處理辦法就是用openpyxl 庫操作xlsx格式文件。

? 參考:Python - openpyxl 讀寫操作Excel

轉載于:https://www.cnblogs.com/BlueSkyyj/p/7570223.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391308.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391308.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機工程師分級_這些是每個計算機工程師都應該知道的數字

計算機工程師分級In 2010, Jeff Dean from Google gave a wonderful talk at Stanford that made him quite famous. In it, he discussed a few numbers that are relevant to computing systems. Then Peter Norvig published those numbers for the first time on the inter…

leetcode 377. 組合總和 Ⅳ(dp)

給你一個由 不同 整數組成的數組 nums ,和一個目標整數 target 。請你從 nums 中找出并返回總和為 target 的元素組合的個數。 題目數據保證答案符合 32 位整數范圍。 示例 1: 輸入:nums [1,2,3], target 4 輸出:7 解釋&…

1.4- 定時任務總結之九句箴言

1.4定時任務之九句箴言九句箴言---- 不會九句箴言別做運維1.定時任務規則之前加注釋2.使用腳本代替命令行制定定時任務3.定時任務中date命令%的特殊含義定時任務中,%表示回車 -----可以使用\轉義4.運行腳本一定要用/bin/sh或sh腳本不必須有x權限5.定時任務中-命令或腳本的輸出…

ubuntu 18.04 vi里面方向鍵變成abcd 處理辦法

sudo apt-get remove vim-common sudo apt-get install vim 轉載于:https://www.cnblogs.com/testing-BH/p/11506400.html

知識力量_網絡分析的力量

知識力量The most common way to store data is in what we call relational form. Most systems get analyzed as collections of independent data points. It looks something like this:存儲數據的最常見方式是我們所謂的關系形式。 大多數系統作為獨立數據點的集合進行分析…

python里的apply,applymap和map的區別

apply,applymap和map的應用總結:apply 用在dataframe上,用于對row或者column進行計算;applymap 用于dataframe上,是元素級別的操作;map (其實是python自帶的)用于series上,是元素級別的操作。如…

驗證曲線和學習曲線_如何擊敗技術學習曲線的怪物

驗證曲線和學習曲線Doing what I do for a living, which these days mostly involves creating technology books and courseware, I’m constantly learning new technologies. In a way, my new tech adventures are not much different than the ones most IT pros face, e…

234

234 轉載于:https://www.cnblogs.com/Forever77/p/11509588.html

SCCM PXE客戶端無法加載DP(分發點)映像

上一篇文章我們講到了一個比較典型的PXE客戶端無法找到操作系統映像的故障,今天再和大家一起分享一個關于 PXE客戶端無法加載分發點映像的問題。具體的報錯截圖如下:從報錯中我們可以看到,PXE客戶端已經成功的找到了SCCM服務器,并…

Docker 入門(2)技術實現和核心組成

1. Docker 的技術實現 Docker 的實現,主要歸結于三大技術: 命名空間 ( Namespaces )控制組 ( Control Groups )聯合文件系統 ( Union File System ) 1.1 Namespace 命名空間可以有效地幫助Docker分離進程樹、網絡接口、掛載點以及進程間通信等資源。L…

marlin 三角洲_帶火花的三角洲湖:什么和為什么?

marlin 三角洲Let me start by introducing two problems that I have dealt time and again with my experience with Apache Spark:首先,我介紹一下我在Apache Spark上的經歷反復解決的兩個問題: Data “overwrite” on the same path causing data l…

環境變量的作用

1. PATH環境變量。作用是指定命令搜索路徑,在shell下面執行命令時,它會到PATH變量所指定的路徑中查找看是否能找到相應的命令程序。我們需要把 jdk安裝目錄下的bin目錄增加到現有的PATH變量中,bin目錄中包含經常要用到的可執行文件如javac/ja…

WeWork通過向225,000個社區征稅來拼命地從Meetup.com榨取現金

Update: A few hours after I published this article, Meetup quietly added a note to the top of their announcement. They have not tweeted or done anything else to publicize this note, but some people noticed it and shared it with me.更新:在我發布本…

eda分析_EDA理論指南

eda分析Most data analysis problems start with understanding the data. It is the most crucial and complicated step. This step also affects the further decisions that we make in a predictive modeling problem, one of which is what algorithm we are going to ch…

leetcode 897. 遞增順序搜索樹(中序遍歷)

給你一棵二叉搜索樹,請你 按中序遍歷 將其重新排列為一棵遞增順序搜索樹,使樹中最左邊的節點成為樹的根節點,并且每個節點沒有左子節點,只有一個右子節點。 示例 1: 輸入:root [5,3,6,2,4,null,8,1,null…

【一針見血】 JavaScript this

JavaScript this 指向一站式解決轉載于:https://www.cnblogs.com/xueyejinghong/p/8403987.html

基于ssm框架和freemarker的商品銷售系統

項目說明 1、項目文件結構 2、項目主要接口及其實現 (1)Index: 首頁頁面:展示商品功能,可登錄或查看商品詳細信息 (2)登錄:/ApiLogin 3、dao層 數據持久化層,把商品和用戶…

c++飛揚的小鳥游戲_通過建立一個飛揚的鳥游戲來學習從頭開始

c飛揚的小鳥游戲Learn how to use Scratch 3.0 by building a flappy bird game in this course developed by Warfame. Scratch is a free programming language and online community where you can create your own interactive stories, games, and animations. Scratch is…

345

345 轉載于:https://www.cnblogs.com/Forever77/p/11512701.html

簡·雅各布斯指數第二部分:測試

In Part I, I took you through the data gathering and compilation required to rank Census tracts by the four features identified by Jane Jacobs as the foundation of a great neighborhood:在第一部分中 ,我帶您完成了根據簡雅各布斯(Jacobs Jacobs)所確定…