當前位置:首頁 » 編程語言 » pythonexecl讀寫

pythonexecl讀寫

發布時間: 2024-04-02 13:03:15

python怎麼讀取excel的數據

最近由於經常要用到Excel,需要根據Excel表格中的內容對一些apk進行處理,手動處理很麻煩,於是決定寫腳本來處理。首先貼出網上找來的讀寫Excel的腳本。
1.讀取Excel(需要安裝xlrd):

#-*- coding: utf8 -*-import xlrdfname = "reflect.xls"bk = xlrd.open_workbook(fname)shxrange = range(bk.nsheets)try:sh = bk.sheet_by_name("Sheet1")except:print "no sheet in %s named Sheet1" % fname#獲取行數nrows = sh.nrows#獲取列數ncols = sh.ncolsprint "nrows %d, ncols %d" % (nrows,ncols)#獲取第一行第一列數據cell_value = sh.cell_value(1,1)#print cell_valuerow_list = []#獲取各行數據for i in range(1,nrows):row_data = sh.row_values(i)row_list.append(row_data)

2.寫入Excel(需安裝pyExcelerator)

12345678from pyExcelerator import *w = Workbook() #創建一個工作簿ws = w.add_sheet('Hey, Hades') #創建一個工作表ws.write(0,0,'bit') #在1行1列寫入bitws.write(0,1,'huang') #在1行2列寫入huangws.write(1,0,'xuan') #在2行1列寫入xuanw.save('mini.xls') #保存

3.再舉個自己寫的讀寫Excel的例子
讀取reflect.xls中的某些信息進行處理後寫入mini.xls文件中。

#-*- coding: utf8 -*-import xlrdfrom pyExcelerator import *w = Workbook()ws = w.add_sheet('Sheet1')fname = "reflect.xls"bk = xlrd.open_workbook(fname)shxrange = range(bk.nsheets)try:sh = bk.sheet_by_name("Sheet1")except:print "no sheet in %s named Sheet1" % fnamenrows = sh.nrowsncols = sh.ncolsprint "nrows %d, ncols %d" % (nrows,ncols)cell_value = sh.cell_value(1,1)#print cell_valuerow_list = []mydata = []for i in range(1,nrows):row_data = sh.row_values(i)pkgdatas = row_data[3].split(',')#pkgdatas.split(',')#獲取每個包的前兩個欄位for pkgdata in pkgdatas:pkgdata = '.'.join((pkgdata.split('.'))[:2])mydata.append(pkgdata)#將列表排序mydata = list(set(mydata))print mydata#將列表轉化為字元串mydata = ','.join(mydata)#寫入數據到每行的第一列ws.write(i,0,mydata)mydata = []row_list.append(row_data[3])#print row_listw.save('mini.xls')

4.現在我需要根據Excel文件中滿足特定要求的apk的md5值來從伺服器獲取相應的apk樣本,就需要這樣做:

252627282930313233#-*-coding:utf8-*-import xlrdimport osimport shutilfname = "./excelname.xls"bk = xlrd.open_workbook(fname)shxrange = range(bk.nsheets)try:#打開Sheet1工作表sh = bk.sheet_by_name("Sheet1")except:print "no sheet in %s named Sheet1" % fname#獲取行數nrows = sh.nrows#獲取列數ncols = sh.ncols#print "nrows %d, ncols %d" % (nrows,ncols)#獲取第一行第一列數據cell_value = sh.cell_value(1,1)#print cell_valuerow_list = []#range(起始行,結束行)for i in range(1,nrows):row_data = sh.row_values(i)if row_data[6] == "HXB":filename = row_data[3]+".apk"#print "%s %s %s" %(i,row_data[3],filename)filepath = r"./1/"+filenameprint "%s %s %s" %(i,row_data[3],filepath)if os.path.exists(filepath):shutil.(filepath, r"./myapk/")

補充一個使用xlwt3進行Excel文件的寫操作。

2526import xlwt3if __name__ == '__main__':datas = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h']]#二維數組file_path = 'D:\test.xlsx'wb = xlwt3.Workbook()sheet = wb.add_sheet('test')#sheet的名稱為test#單元格的格式style = 'pattern: pattern solid, fore_colour yellow; '#背景顏色為黃色style += 'font: bold on; '#粗體字style += 'align: horz centre, vert center; '#居中header_style = xlwt3.easyxf(style)row_count = len(datas)col_count = len(datas[0])for row in range(0, row_count):col_count = len(datas[row])for col in range(0, col_count):if row == 0:#設置表頭單元格的格式sheet.write(row, col, datas[row][col], header_style)else:sheet.write(row, col, datas[row][col])wb.save(file_path)

輸出的文件內容如下圖:

註:以上代碼在Python 3.x版本測試通過。

好了,python操作Excel就這么!些了,簡單吧

Ⅱ python 操作excel 讀 寫 xlsx

原文非常清晰,全程無bug,調試通過,留作記錄以防丟失

一、xlrd和xlwt

使用之前需要先安裝,windows上如果直接在cmd中運行python則需要先執行pip3 install xlrd和pip3 install xlwt,如果使用pycharm則需要在項目的解釋器中安裝這兩個模塊,File-Settings-Project:layout-Project Interpreter,點擊右側界面的+號,然後搜索xlrd和xlwt,然後點擊Install Package進行安裝。

對於excel來說,整個excel文件稱為工作簿,工作簿中的每個頁稱為工作表,工作表又由單元格組成。

對於xlrd和xlwt,行數和列數從0開始,單元格的行和列也從0開始,例如sheet.row_values(2)表示第三行的內容,sheet.cell(1,2).value表示第二行第三列單元格的內容。

1.xlrd模塊讀取excel文件

使用xlrd模塊之前需要先導入import xlrd,xlrd模塊既可讀取xls文件也可讀取xlsx文件。

獲取工作簿對象 :book = xlrd.open_workbook('excel文件名稱')

獲取所有工作表名稱 :names = book.sheet_names(),結果為列表

根據索引獲取工作表對象 :sheet = book.sheet_by_index(i)

根據名稱獲取工作表對象 :sheet = book.sheet_by_name('工作表名稱')

獲取工作錶行數 :rows = sheet.nrows

獲取工作表列數 :cols = sheet.ncols

獲取工作表某一行的內容 :row = sheet.row_values(i) ,結果為列表   【sheet.row(i),列表】

獲取工作表某一列的內容 :col = sheet.col_values(i)  結果為列表   【sheet.col(i),列表】

獲取工作表某一單元格的內容 :cell = sheet.cell_value(m,n)、 sheet.cell(m,n).value、sheet.row(m)[n].value,sheet.col(n)[m].value,結果為字元串或數值    【sheet.cell(0,0),xlrd.sheet.Cell對象】

示例:假設在py執行文件同層目錄下有一fruit.xls文件,有三個sheet頁Sheet1、Sheet2、Sheet3,其中Sheet1內容如下:

import xlrd

book = xlrd.open_workbook('fruit.xls')print('sheet頁名稱:',book.sheet_names())

sheet = book.sheet_by_index(0)

rows = sheet.nrows

cols = sheet.ncolsprint('該工作表有%d行,%d列.'%(rows,cols))print('第三行內容為:',sheet.row_values(2))print('第二列內容為%s,數據類型為%s.'%(sheet.col_values(1),type(sheet.col_values(1))))print('第二列內容為%s,數據類型為%s.'%(sheet.col(1),type(sheet.col(1))))print('第二行第二列的單元格內容為:',sheet.cell_value(1,1))print('第三行第二列的單元格內容為:',sheet.cell(2,1).value)print('第五行第三列的單元格內容為:',sheet.row(4)[2].value)print('第五行第三列的單元格內容為%s,數據類型為%s'%(sheet.col(2)[4].value,type(sheet.col(2)[4].value)))print('第五行第三列的單元格內容為%s,數據類型為%s'%(sheet.col(2)[4],type(sheet.col(2)[4])))# 執行結果# sheet頁名稱: ['Sheet1', 'Sheet2', 'Sheet3']# 該工作表有5行,3列.# 第三行內容為: ['梨', 3.5, 130.0]# 第二列內容為['單價/元', 8.0, 3.5, 4.5, 3.8],數據類型為<class 'list'>.# 第二列內容為[text:'單價/元', number:8.0, number:3.5, number:4.5, number:3.8],數據類型為<class 'list'>.# 第二行第二列的單元格內容為: 8.0# 第三行第二列的單元格內容為: 3.5# 第五行第三列的單元格內容為: 300.0# 第五行第三列的單元格內容為300.0,數據類型為<class 'float'># 第五行第三列的單元格內容為number:300.0,數據類型為<class 'xlrd.sheet.Cell'>

可以看出通過sheet.row(i)、sheet.col(i)也可獲取行或列的內容,並且結果也是一個列表,但是列表中的每一項類似字典的鍵值對,形式為數據類型:值。

而sheet.cell(0,0)獲取單元格內容,結果是一個鍵值對,並且是一個xlrd.sheet.Cell對象。

2.xlwt寫入excel文件

使用xlwt模塊之前需要先導入import xlwt,xlwt模塊只能寫xls文件,不能寫xlsx文件(寫xlsx程序不會報錯,但最後文件無法直接打開,會報錯)。

創建工作簿 :book = xlwt.Workbook(),如果寫入中文為亂碼,可添加參數encoding = 'utf-8'

創建工作表 :sheet = book.add_sheet('Sheet1')

向單元格寫入內容 :sheet.write(m,n,'內容1')、sheet.write(x,y,'內容2')

保存工作簿 :book.save('excel文件名稱'),默認保存在py文件相同路徑下,如果該路徑下有相同文件,會被新創建的文件覆蓋,即xlwt不能修改文件。

import xlwt

book = xlwt.Workbook()

sheet = book.add_sheet('Sheet1')

sheet.write(0,0,'hello')

sheet.write(1,0,'你好')

book.save('hello.xls')

逐個單元格寫入excel比較麻煩,可以按行或者列寫入。

import xlwt

proj = ['名稱','單價/元','庫存/kg']

fruit = ['蘋果','梨','香蕉','橘子']

price = [8,3.5,4.5,3.8]

storage = [150,130,100,300]

book = xlwt.Workbook()

sheet = book.add_sheet('Sheet1')foriin range(0,len(proj)):

    sheet.write(0,i,proj[i]) #按行插入行標題foriin range(0,len(fruit)):

    sheet.write(i+1,0,fruit[i])#插入第一列水果名稱foriin range(0,len(price)):

    sheet.write(i+1,1,price[i])#插入第二列單價foriin range(0,len(storage)):

    sheet.write(i+1,2,storage[i])#插入第三列庫存book.save('fruit2.xls')

二、openpyxl模塊

openpyxl模塊可實現對excel文件的讀、寫和修改,只能處理xlsx文件,不能處理xls文件,使用之前同樣需要先安裝該模塊,再導入 import openpyxl。

對於openpyxl,行數和列數都從1開始,單元格的行和列也從1開始。例如sheet.cell(1,2).value表示第一行第二列單元格的內容

1.openpyxl讀取excel文件

獲取工作簿對象:book = openpyxl.load_workbook('excel文件名稱')

獲取所有工作表名稱:names = book.sheetnames

獲取工作表對象:sheet1 = book.worksheets[n]、sheet2 = book['工作表名稱']、sheet3 = book[book.sheetnames[n]]

獲取工作表名稱:title = sheet1.title

獲取工作錶行數:rows = sheet1.max_row

獲取工作表列數:cols = sheet1.max_column

獲取某一單元格內容:cell = sheet.cell(1,2).value、sheet['單元格'].value例如sheet['B1'].value

假設有一fruit2.xlsx,除後綴名其他與上述fruit.xls完全一樣

import openpyxl

book = openpyxl.load_workbook('fruit2.xlsx')print('所有sheet頁名稱:',book.sheetnames) 

sheet = book.worksheets[0]

sheet2 = book['Sheet1']

sheet3 = book[book.sheetnames[0]]print('工作表名稱:',sheet3.title)

rows = sheet.max_row

cols = sheet.max_columnprint('該工作表有%d行,%d列.'%(rows,cols))# 執行結果# 所有sheet頁名稱: ['Sheet1', 'Sheet2', 'Sheet3']# 工作表名稱: Sheet1# 該工作表有5行,3列.

2.行和列生成器

對於xlrd模塊來說,可直接通過sheet.row[i]和sheet.col[i]獲取行和列的內容,但是對於openpyxl模塊來說,無法直接獲取某一行或列的內容,openpyxl模塊的sheet.rows和sheet.columns表示行和列的生成器,即generator object,需要通過循環或轉換成列表、元組的形式得到行或列的值。

print(sheet.rows,sheet.columns)forcolin sheet.columns:

    print(col)forrowin sheet.rows:

    foriin row:

        print(i.value,end='')

    print()# 執行結果# <generator object Worksheet._cells_by_row at 0x00000230E011A2A0> <generator object Worksheet._cells_by_col at 0x00000230E102FC00># (<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.A2>, <Cell 'Sheet1'.A3>, <Cell 'Sheet1'.A4>, <Cell 'Sheet1'.A5>)# (<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.B5>)# (<Cell 'Sheet1'.C1>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.C4>, <Cell 'Sheet1'.C5>)# 名稱  單價/元  庫存/kg# 蘋果  8  150# 梨  3.5  130# 香蕉  4.5  100# 橘子  3.8  300

如果要獲取某一行或者列的內容,可將行、列生成器對象轉換成列表或者元組,再循環列表或者元組得到內容。

前面說過openpyxl模塊的行和列都從1開始,但是由於將生成器轉化成了列表list(sheet.rows),而列表的索引從0開始,因此list(sheet.rows)[1]還是表示第二行的內容,不是第一行的內容。

foriinlist(sheet.rows)[1]:

    print(i.value,end='')print()foriin list(sheet.columns)[0]:

    print(i.value,end='')# 執行結果# 蘋果  8  150# 名稱  蘋果  梨  香蕉  橘子

獲取單元格的內容

print(sheet.cell(1,2).value)#第一行第二列單元格的內容print(sheet['a2'].value)#使用excel單元格的表示法,字母不區分大小寫

3.openpyxl寫excel文件 

創建工作簿 :book = openpyxl.Workbook(),如果寫入中文為亂碼,可添加參數encoding = 'utf-8'

創建工作表: sheet = book.create_sheet('工作表名稱',0),0表示創建的工作表在工作薄最前面

向單元格寫入內容 :sheet.cell(m,n,'內容1')、sheet.cell(x,y,'內容2')

保存工作簿 :book.save('excel文件名稱'),默認保存在py文件相同路徑下,如果該路徑下有相同文件,會被新創建的文件覆蓋。

book = openpyxl.Workbook()

sheet = book.create_sheet('Sheet1',0)

proj = ['名稱','單價/元','庫存/kg']

fruit = ['蘋果','香蕉','梨','橘子']

price = [8,3.5,4.5,3.8]

storage = [150,130,300,100]foriin range(len(proj)):

    sheet.cell(1,i+1,proj[i])foriin range(len(fruit)):

    sheet.cell(i+2,1,fruit[i])foriin range(len(price)):

    sheet.cell(i+2,2,price[i])foriin range(len(storage)):

    sheet.cell(i+2,3,storage[i])

book.save('fruit2.xlsx')

4.openpyxl修改excel文件

sheet.insert_rows(m)和sheet.insert_cols(n)分別表示在第m行、第n列前面插入行、列

sheet.delete_rows(m)和sheet.delete_cols(n)分別表示刪除第m行、第n列

rows = sheet.max_row

sheet.insert_rows(rows+2)

cherry = ['櫻桃',17,80]  forjin cherry:

    sheet.cell(rows+1,cherry.index(j)+1,j)

book.save('fruit2.xlsx')

修改單元格內容:sheet.cell(m,n) = '內容1'或者sheet['B3'] = '內容2' 

sheet.cell(3,2,4)

sheet['B3'] = 5book.save('fruit2.xlsx')

在最後追加行:sheet.append(可迭代對象)

straberry = ['草莓',20,50]

sheet.append(straberry)

book.save('fruit2.xlsx')

三、xlsxwriter 模塊

只能操作xlsx,只能寫。在excel中插入圖片

import matplotlib.pyplot as plt

  2 import pandas as pd

  3 import random

  4 import xlsxwriter

  5

  6 ts = pd.Series(random.randrange(10))

  7 fig = plt.figure()

  8 ax = fig.add_subplot(1,1,1)

  9 ts.plot(ax=ax)

10 fig.savefig('foo.png')

11

12 workbook = xlsxwriter.Workbook('pngxls.xlsx')    # 創建excel文件

13 worksheet1 = workbook.add_worksheet('png')  # 括弧內為工作表表名

14 # 第一個參數是插入的起始單元格,第二個參數是圖片你文件的絕對路徑

15 worksheet1.write('A1','hello')

16 worksheet1.insert_image('B2','foo.png')

18 workbook.close()

xlrd、xlwt和openpyxl處理excel文件,在寫入文件的時候不如pandas簡單,pandas處理excel文件見另外一篇博客 https://www.cnblogs.com/Forever77/p/11298173.html

Ⅲ python怎麼讀寫excel文件

最近用python處理一個小項目,其中涉及到對excel的讀寫操作,通過查資料及實踐做了一下總結,以便以後用。

python讀寫excel文件要用到兩個庫:xlrd和xlwt,首先下載安裝這兩個庫。

1、#讀取Excel

importxlrd

data = xlrd.open_workbook(excelFile)

table = data.sheets()[0]

nrows = table.nrows #行數

ncols = table.ncols #列數

for i in xrange(0,nrows):
rowValues= table.row_values(i) #某一行數據
for item in rowValues:
printitem

2、寫Excel文件

'''往EXCEl單元格寫內容,每次寫一行sheet:頁簽名稱;row:行內容列表;rowIndex:行索引;

isBold:true:粗欄位,false:普通字體'''

defWriteSheetRow(sheet,rowValueList,rowIndex,isBold):

i = 0

style = xlwt.easyxf('font: bold 1')

#style = xlwt.easyxf('font: bold 0, color red;')#紅色字體

#style2 = xlwt.easyxf('pattern: pattern solid, fore_colour yellow; font: bold on;') # 設置Excel單元格的背景色為黃色,字體為粗體

forsvalue inrowValueList:

strValue = unicode(str(svalue),'utf-8')

ifisBold:

sheet.write(rowIndex,i,strValue,style)

else:

sheet.write(rowIndex,i,strValue)

i = i + 1

'''寫excel文件'''

defsave_Excel(strFile):

excelFile = unicode(strFile,"utf8")

wbk = xlwt.Workbook()

sheet = wbk.add_sheet('sheet1',cell_overwrite_ok=True)

headList = ['標題1','標題2','標題3','標題4','總計']

rowIndex = 0

WriteSheetRow(sheet,headList,rowIndex,True)

fori inxrange(1,11):

rowIndex = rowIndex + 1

valueList = []

forj inxrange(1,5):

valueList.append(j*i)

WriteSheetRow(sheet,valueList,rowIndex,False)

wbk.save(excelFile)

style2 = xlwt.easyxf('pattern: pattern solid, fore_colour yellow; font: bold on;')

在設置上Excel單元格的背景色時,fore_colour支持的顏色是有限的,僅支持一下顏色

aqua 0x31
black 0x08
blue 0x0C
blue_gray 0x36
bright_green 0x0B
brown 0x3C
coral 0x1D
cyan_ega 0x0F
dark_blue 0x12
dark_blue_ega 0x12
dark_green 0x3A
dark_green_ega 0x11
dark_purple 0x1C
dark_red 0x10
dark_red_ega 0x10
dark_teal 0x38
dark_yellow 0x13
gold 0x33
gray_ega 0x17
gray25 0x16
gray40 0x37
gray50 0x17
gray80 0x3F
green 0x11
ice_blue 0x1F
indigo 0x3E
ivory 0x1A
lavender 0x2E
light_blue 0x30
light_green 0x2A
light_orange 0x34
light_turquoise 0x29
light_yellow 0x2B
lime 0x32
magenta_ega 0x0E
ocean_blue 0x1E
olive_ega 0x13
olive_green 0x3B
orange 0x35
pale_blue 0x2C
periwinkle 0x18
pink 0x0E
plum 0x3D
purple_ega 0x14
red 0x0A
rose 0x2D
sea_green 0x39
silver_ega 0x16
sky_blue 0x28
tan 0x2F
teal 0x15
teal_ega 0x15
turquoise 0x0F
violet 0x14
white 0x09
yellow 0x0D"""

另外一種方式是 用pyExcelerator

Ⅳ 使用python讀取excel中的數據,並重新寫入到新的excel中

使用Python3運行
起初是讀取excel中的數據,進行相關的計算將結果追加在後面,沒有找到合適的辦法,就只能採用這種讀取數據,進行相關操作,重新寫入的方法

(1)使用xlrd打開xls文件,讀取數據
(2)將需要的數據放進list中,進行相應的計算得出結果
(3)使用xlutils的將xlrd對象轉化為xlwt對象
(4)使用轉化的xlwt對象的write方法,將結果寫入
(5)使用xlwt的save進行保存

主要用它讀取Excel數據

主要用它來將數據寫入到excel中

主要用xlutils的方法將xlrd對象轉化為xlwt對象,好來進行寫入

刪除了一些東西大致如下

Ⅳ python怎麼讀寫當前的excel

python有很強大的excel讀寫能力,只需要安裝xlrd,xlwt這兩個庫就可以了

pipinstallxlrd
Pipinstallxlwt

看教程,在右邊的鏈接:網頁鏈接

#ecoding=utf-8
importsys
reload(sys)
sys.setdefaultencoding('utf-8')
frompyExceleratorimport*
w=Workbook()#創建一個工作簿
ws=w.add_sheet('1')#創建一個工作表
forjinrange(0,5):#控制列
foriinrange(0,50000):#控制行
if(j==0):#第一列
ws.write(i,j,'13001454722')
if(j==1):
ws.write(i,j,'6')
if(j==2):
ws.write(i,j,'KQ_201801_20WANONE')
if(j==3):
ws.write(i,j,'1')
if(j==4):
ws.write(i,j,u'否')
w.save('xqtest.xls')

Ⅵ 如何用python讀excel文件

想要使用python實現對Excel文件的讀寫,首先需要安裝專用的模塊(如果你是大牛可以自己編寫)xlrd模塊。

解壓以後啟動cmd命令窗口,在其中輸入xlrd解壓後所在的目錄,執行安裝命令如圖所示(cmd命令的使用請自行網路,本機已經配置好了python環境才可以正常安裝)

在IDE環境中導入使用對應的xlrd模塊,以eclipse環境為例如圖所示
impot xlrd即可

打開Excel文件讀取數據的簡單示例如圖所示:
import xlrd後
(最新的xlrd 0.9.4版本跨平台同時支持.xls和.xlsx)

新手們在使用時會遇到:OSError: Invalid argument:XXX錯誤,這是文件I/O錯誤。在windows中要使用正斜杠 (對:C:/bbbb.xlsx,錯:('C:\bbbb.xlsx')

6
使用xlrd模塊簡單讀取excel中的sheet和行、列數據。
sheets()[i],row_values(i),col_values(i)

熱點內容
零起點學通c語言視頻 發布:2024-11-28 14:29:42 瀏覽:290
python獲取串口數據 發布:2024-11-28 14:22:39 瀏覽:666
台灣ip代理伺服器雲主機 發布:2024-11-28 14:18:24 瀏覽:465
php寫後端 發布:2024-11-28 14:09:36 瀏覽:234
拍環衛工人的腳本 發布:2024-11-28 14:03:35 瀏覽:990
java課程實戰培訓 發布:2024-11-28 13:57:11 瀏覽:303
linux硬碟空間 發布:2024-11-28 13:55:55 瀏覽:531
寫簡單編譯器 發布:2024-11-28 13:55:42 瀏覽:512
編譯net時 發布:2024-11-28 13:52:38 瀏覽:405
sqlserver2008分區表 發布:2024-11-28 13:41:58 瀏覽:481