python下的excel表格處理 內含面試題

xlrd模塊

​ xlrd是python中一個第三方的用於讀取excle表格的模塊,不少企業在沒有使用計算機管理前大多使用表格來管理數據,因此導入表格仍是很是經常使用的!python

安裝xlrd

pip install xlrd

exlce結構分析

​ 一個excle表格包含多個sheetmysql

​ 一個sheet中包含多行多列面試

​ 每一個單元格具有惟一的行號和列號sql

經常使用函數

import xlrd

# 讀取文件
work_book = xlrd.open_workbook("/Users/jerry/Desktop/公司機密數據.xlsx")
# 選取一個表

# 獲取全部全部表格名稱
print(work_book.sheet_names())

# 選擇第2個  索引從0開始
sheet = work_book.sheet_by_index(1)

# 表格名稱
print(sheet.name)

# 行數
print(sheet.nrows)
# 列數
print(sheet.ncols)


#批量讀取行數據
# 取出第6行的所有內容包含數據類型
print(sheet.row(6))
# 取出第6行的內容包含數據類型 從第3列開始獲取
print(sheet.row_slice(6,start_colx=3))

# 取出第6行的內容包含數據類型 從第3列開始獲取
print(sheet.row_slice(6,start_colx=4,end_colx=5))

# 獲取該行全部數據類型 一數字表示
# print(sheet.row_types(6))
# print(sheet.row_values(6))


# 單元格的處理
print(sheet.cell(0,0).value) # 取值
print(sheet.cell(0,0).ctype) # 取類型
print(sheet.cell_value(2,0)) # 直接取值

print(sheet.row(0)[0]) # 先取行再取單元格
print(sheet.col(0)) # 第0列全部數據
print(sheet.col(0)) # 先取列再取單元格

print(sheet.cell_type(0,0))

# 單元格位置轉換
print(xlrd.cellname(2,1))
print(xlrd.cellnameabs(0,2))
print(xlrd.colname(5))


# 時間類型轉換
# print(sheet.cell(6,5).value)
# print(xlrd.xldate_as_datetime(sheet.cell(6,5).value,1))

案例:

讀取一個報價單 其第二個sheet包含合併單元格數據庫

文件地址:https://share.weiyun.com/5GaLY2mjson

import xlrd

sheet = xlrd.open_workbook("報價單.xlsx").sheet_by_index(1)

def get_text(row,col):
    # 判斷該座標是不是被合併的單元格    合併單元格的數據都在合併區域的第一個位置 
    for ces in sheet.merged_cells:
        if (row >= ces[0] and row < ces[1]) and (col >= ces[2] and col < ces[3]):
            return sheet.cell(ces[0],ces[2]).value # 取出合併區域的第一個數據
    return sheet.cell(row,col).value #正常取出對應數據

keys = sheet.row_values(1) # 獲取全部的列標題
data = []
for row in range(2,sheet.nrows):
    dic = {}
    for col in range(sheet.ncols):
        k = keys[col] #肯定key
        res = get_text(row,col)
        dic[k] = res # 肯定值 並存儲
    data.append(dic)


print(data)
# 序列化爲json
import json
json.dump(data,open("test.json","wt"),ensure_ascii=False)

xlwt模塊

​ 是python中一個第三方的用於寫入excle數據到表格的模塊app

​ 用代碼來編寫exlce是很是低效的 因此該模塊瞭解便可。函數

import xlwt
# 建立工做簿
work = xlwt.Workbook()
# 建立一個表
sheet = work.add_sheet("員工信息數據")


#建立一個字體對象
font = xlwt.Font()
font.name = "Times New Roman" # 字體名稱
font.bold = True # 加粗
font.italic = True # 斜體
font.underline = True # 下劃線

#建立一個樣式對象
style = xlwt.XFStyle()
style.font = font


# 寫入標題
for k in keys:
    sheet.write(0,keys.index(k),k,style)

# 寫入數據
for i in infos:
    for k in keys:
        sheet.write(1 + infos.index(i),keys.index(k),label = i[k])
# 保存至文件
work.save("test.xls")

面試題:字體

import xlrd
import pymysql

# 讀取文件
work_book = xlrd.open_workbook("/xxx/xxx.xlsx")
# 選取一個表
sheet = work_book.sheet_by_index(0)

# 遍歷表格數據
datas = []
for row in range(1,sheet.nrows):
    temp_list =[]
    for col in range(sheet.ncols):
        value = sheet.cell_value(row,col)
        temp_list.append(value)
    datas.append(temp_list)

# 打開數據庫鏈接
db = pymysql.connect(host='localhost', port=3306,
                     user='username', passwd='password', db='database_name', charset='utf8')

# 使用cursor()方法獲取操做遊標
cursor = db.cursor()

# SQL 插入語句
sql = "INSERT INTO SHOP(shop_code, shop_name, month) VALUES (%s,%s,%s)"
try:
    # 執行sql語句
    cursor.executemany(sql, datas)
    # 提交到數據庫執行
    db.commit()
except :
    # 若是發生錯誤則回滾
    db.rollback()
# 關閉遊標
cursor.close()
# 關閉數據庫鏈接
db.close()
相關文章
相關標籤/搜索