'''
成都創(chuàng)新互聯(lián)公司主要從事成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)鎮(zhèn)沅,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108
如題。excel表格數(shù)據(jù)里面有班級(jí),姓名,性別,學(xué)號(hào)的數(shù)據(jù)。如何據(jù)全部讀取出來(lái),
并且每一行數(shù)據(jù)都顯示為一個(gè)字典?
比如這樣展示:班級(jí):一(1)班,姓名:小明,性別:男,學(xué)號(hào):110
'''
'''
思路:
先將表頭每格數(shù)據(jù)讀取出來(lái),放在列表中:[‘班級(jí)’,‘姓名’,‘性別’,‘學(xué)號(hào)’]
再將表頭下面每行也讀取出來(lái),放在列表中:['一(1)班','小明‘,’男','110’]
關(guān)鍵就算要用zip函數(shù),首先了解zip的作用
是將2個(gè)列表中的數(shù)據(jù)第一個(gè)和第一個(gè)組合成元組,第二個(gè)和第二個(gè)組合成元組,以此類(lèi)推
但它是存放在內(nèi)存中,要將他們變成列表用到list()函數(shù),最后列表要變成字典用到dict{}函數(shù)
'''
import openpyxl
# 讀取excel中的數(shù)據(jù)
# 第一步打開(kāi)工作簿
wb = openpyxl.load_workbook('cases.xlsx')
# 第二步選取表單,注意Sheet是大寫(xiě)的S
sheet = wb['Sheet1']
# 按行獲取數(shù)據(jù)轉(zhuǎn)換成列表
# 先定義一個(gè)總的列表所有的行先放在列表中
rows_data = list(sheet.rows)
# 獲取表單的表頭信息(第一行),也就是列表的第一個(gè)元素
titles = []
for title in rows_data[0]:
titles.append(title.value)
# print(title.value) # 打出來(lái)看看
# 遍歷出除了第一行的其他行
for a_row in rows_data[1:]:
# the_row_data用來(lái)臨時(shí)存放每一行數(shù)據(jù)
a_row_data = []
# 遍歷每一行的單元格
for cell in a_row:
# print(cell.value) # 取單元格的值
# 判斷該單元格的值是否為字符串類(lèi)型,
# 因?yàn)橛行┦强盏模?/p>
# 是字符串就轉(zhuǎn)換成python表達(dá)式,空的就不是字符串類(lèi)型就直接添加
if isinstance(cell.value, str):
a_row_data.append(eval(cell.value))
else:
a_row_data.append(cell.value)
# print(data) #打印出來(lái)看看
# 將表頭和該條數(shù)據(jù)內(nèi)容,打包成一個(gè)字典
rows_dict = dict(list(zip(titles, a_row_data)))
# all_rows.append(rows_dict)
print(rows_dict)
是用pandas讀取的嗎?
import pandas as pd
df = pd.read_excel(path)
df = df.where(df.notnull(), None) #這句的作用是把表格里的NAN替換掉,這里的None,可以換成你想替換的東西
思路如下:
導(dǎo)入csv庫(kù);
打開(kāi)文件,并用csv庫(kù)函數(shù)reader讀入數(shù)據(jù);
csv讀入的數(shù)據(jù)是一行一行的,所以通過(guò)循環(huán)語(yǔ)句把讀到的數(shù)據(jù)放入到數(shù)組里
import?csv?#?必要庫(kù)導(dǎo)入
filepath?=?'test.csv'?#?定義文件名稱(chēng),本文件要與當(dāng)前的.py文件要在同一文件夾下,不然要用絕對(duì)路徑
with?open(filepath,'r')?as?csvfile:?#?打開(kāi)數(shù)據(jù)文件
reader?=?csv.reader(csvfile)?#?用csv的reader函數(shù)讀取數(shù)據(jù)文件
header?=?next(reader)?#?讀取數(shù)據(jù)文件的表頭
data?=?[]?#?定義一個(gè)空數(shù)組用于保存文件的數(shù)據(jù)
for?line?in?reader:?#?循環(huán)讀取數(shù)據(jù)文件并保存到數(shù)組data中
data.append(line)?#?line是個(gè)一維數(shù)組,是數(shù)據(jù)文件中的一行數(shù)據(jù)
print(header)?#?表頭
print(data)?#?讀取的二維數(shù)組
最近由于經(jīng)常要用到Excel,需要根據(jù)Excel表格中的內(nèi)容對(duì)一些apk進(jìn)行處理,手動(dòng)處理很麻煩,于是決定寫(xiě)腳本來(lái)處理。首先貼出網(wǎng)上找來(lái)的讀寫(xiě)Excel的腳本。
1.讀取Excel(需要安裝xlrd):
123456789101112131415161718192021222324
#-*- coding: utf8 -*-import xlrd??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" % fname#獲取行數(shù)nrows = sh.nrows#獲取列數(shù)ncols = sh.ncolsprint "nrows %d, ncols %d" % (nrows,ncols)#獲取第一行第一列數(shù)據(jù)cell_value = sh.cell_value(1,1)#print cell_value??row_list = []#獲取各行數(shù)據(jù)for i in range(1,nrows):?row_data = sh.row_values(i)?row_list.append(row_data)
2.寫(xiě)入Excel(需安裝pyExcelerator)
12345678
from pyExcelerator import *?w = Workbook()? #創(chuàng)建一個(gè)工作簿ws = w.add_sheet('Hey, Hades')? #創(chuàng)建一個(gè)工作表ws.write(0,0,'bit') #在1行1列寫(xiě)入bitws.write(0,1,'huang') #在1行2列寫(xiě)入huangws.write(1,0,'xuan') #在2行1列寫(xiě)入xuanw.save('mini.xls')? #保存
3.再舉個(gè)自己寫(xiě)的讀寫(xiě)Excel的例子
讀取reflect.xls中的某些信息進(jìn)行處理后寫(xiě)入mini.xls文件中?!?/p>
1234567891011121314151617181920212223242526272829303132333435363738394041424344
#-*- 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" % fname?nrows = sh.nrowsncols = sh.ncolsprint "nrows %d, ncols %d" % (nrows,ncols)??cell_value = sh.cell_value(1,1)#print cell_value??row_list = []mydata = []for i in range(1,nrows):?row_data = sh.row_values(i)?pkgdatas = row_data[3].split(',')?#pkgdatas.split(',')?#獲取每個(gè)包的前兩個(gè)字段?for pkgdata in pkgdatas:??pkgdata = '.'.join((pkgdata.split('.'))[:2])??mydata.append(pkgdata)?#將列表排序?mydata = list(set(mydata))?print mydata?#將列表轉(zhuǎn)化為字符串?mydata = ','.join(mydata)?#寫(xiě)入數(shù)據(jù)到每行的第一列?ws.write(i,0,mydata)?mydata = []?row_list.append(row_data[3])#print row_list?w.save('mini.xls')
4.現(xiàn)在我需要根據(jù)Excel文件中滿足特定要求的apk的md5值來(lái)從服務(wù)器獲取相應(yīng)的apk樣本,就需要這樣做:
123456789101112131415161718192021222324252627282930313233
#-*-coding:utf8-*-import xlrdimport osimport shutil??fname = "./excelname.xls"bk = xlrd.open_workbook(fname)shxrange = range(bk.nsheets)try:?#打開(kāi)Sheet1工作表?sh = bk.sheet_by_name("Sheet1")except:?print "no sheet in %s named Sheet1" % fname#獲取行數(shù)nrows = sh.nrows#獲取列數(shù)ncols = sh.ncols#print "nrows %d, ncols %d" % (nrows,ncols)#獲取第一行第一列數(shù)據(jù)cell_value = sh.cell_value(1,1)#print cell_value??row_list = []#range(起始行,結(jié)束行)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/"+filename??print "%s %s %s" %(i,row_data[3],filepath)??if os.path.exists(filepath):???shutil.copy(filepath, r"./myapk/")
補(bǔ)充一個(gè)使用xlwt3進(jìn)行Excel文件的寫(xiě)操作。
1234567891011121314151617181920212223242526
import xlwt3?if __name__ == '__main__':?????????datas = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h']]#二維數(shù)組????file_path = 'D:\\test.xlsx'?????????wb = xlwt3.Workbook()????sheet = wb.add_sheet('test')#sheet的名稱(chēng)為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:#設(shè)置表頭單元格的格式????????????????sheet.write(row, col, datas[row][col], header_style)????????????else:????????????????sheet.write(row, col, datas[row][col])????wb.save(file_path)
輸出的文件內(nèi)容如下圖:
注:以上代碼在Python 3.x版本測(cè)試通過(guò)。
好了,python操作Excel就這么!些了,簡(jiǎn)單吧