摘要:之前寫過一篇使用腳本生成文件的文章,時(shí)隔很久這種終于有空寫該庫(kù)的兄弟庫(kù),用來讀取文件。
之前寫過一篇使用Python腳本生成Excel文件的文章,時(shí)隔很久這種終于有空寫該庫(kù)的兄弟庫(kù)xlrd,用來讀取Excel文件。
最近被調(diào)到電商項(xiàng)目,由于種種原因(設(shè)計(jì)不完善、SQL語(yǔ)句書寫不規(guī)范,甲方太奇葩...槽點(diǎn)太多,就不在這里吐槽了)需要經(jīng)常進(jìn)行刷數(shù)據(jù)操作(批量修改錯(cuò)誤數(shù)據(jù)),一般就是寫一寫SQL文件來直接操作,但是在進(jìn)行了反復(fù)的ctrl+c和ctrl+v的操作之后,終于決定寫一個(gè)腳本,直接將Excel文件中需要insert和update讀取出來,并生成SQL文件。
項(xiàng)目GitHub地址:https://github.com/sunny0826/...
生成update語(yǔ)句:
#!/usr/bin/env python #encoding: utf-8 #Author: guoxixi import xlrd import sys reload(sys) sys.setdefaultencoding("utf-8") def open_excel(file="test.xls"): try: data = xlrd.open_workbook(file) # 打開excel文件 return data except Exception, e: print str(e) def excel_table_bycol(file="", where=[0], colindex=[0], table_name="Sheet1"): data = open_excel(file) table = data.sheet_by_name(table_name) # 獲取excel里面的某一頁(yè) nrows = table.nrows # 獲取行數(shù) t_name = table.row_values(0)[0].encode("utf8") #表名 colnames = table.row_values(1) # 獲取第一行的值,作為key來使用 list = [] # (2,nrows)表示取第二行以后的行,第一行為表名,第二行為表頭 for rownum in range(2, nrows): row = table.row_values(rownum) if row: whe = {} for n in where: whe[str(colnames[n]).encode("utf-8")] = str(row[n]).encode("utf-8") #輸入的篩選字段 app = {} for i in colindex: app[str(colnames[i]).encode("utf-8")] = str(row[i]).encode("utf-8") # 將數(shù)據(jù)填入一個(gè)字典中,同時(shí)對(duì)數(shù)據(jù)進(jìn)行utf-8轉(zhuǎn)碼,因?yàn)橛行?shù)據(jù)是unicode編碼的 list.append({"where":whe,"app":app}) # 將字典加入列表中去 return list,t_name def main(file,where,colindex): # colindex為需要更新的列,where為篩選的列 tables = excel_table_bycol(file,where,colindex, table_name=u"Sheet1") with open("./sql_result/update#"+tables[1]+".sql", "w") as f: # 創(chuàng)建sql文件,并開啟寫模式 for info in tables[0]: sql_line = "UPDATE "+tables[1]+" SET" apps = info.get("app") for key,value in apps.items(): if sql_line.endswith("SET"): sql_line += " "+key+"=""+value+"" " else: sql_line += ", " + key + "="" + value + "" " sql_line += " WHERE" where = info.get("where") for key, value in where.items(): if sql_line.endswith("WHERE"): sql_line += " "+key+"=""+value+"" " else: sql_line += "AND " + key + "="" + value + "" " sql_line+=" " f.write(sql_line) # 往文件里寫入sql語(yǔ)句 if __name__ == "__main__": file_name = "test.xls" # 導(dǎo)入xls文件名 where = [0,1,2] # 條件字段 colindex = [3, 4] # 需要插入的列 main(file_name,where,colindex)
在Excel文件中,第一行行需要update的表名,第二行為字段名,每一列為該字段的對(duì)應(yīng)值,這里可以進(jìn)行where過濾,只需要修改main函數(shù)下where數(shù)組內(nèi)的數(shù)字即可,需要update的字段同理,執(zhí)行后就會(huì)生成名字為update#表名.sql的SQL文件。
生成insert語(yǔ)句:
#!/usr/bin/env python #encoding: utf-8 #Author: guoxixi import xlrd import sys reload(sys) sys.setdefaultencoding("utf-8") def open_excel(file="test.xls"): try: data = xlrd.open_workbook(file) # 打開excel文件 return data except Exception, e: print str(e) def excel_table_bycol(file="", colindex=[0], table_name="Sheet1"): data = open_excel(file) table = data.sheet_by_name(table_name) # 獲取excel里面的某一頁(yè) nrows = table.nrows # 獲取行數(shù) t_name = table.row_values(0)[0].encode("utf8") #表名 colnames = table.row_values(1) # 獲取第一行的值,作為key來使用 list = [] # (2,nrows)表示取第二行以后的行,第一行為表名,第二行為表頭 list.append(t_name) list.append(colnames) for rownum in range(2, nrows): row = table.row_values(rownum) if row: app = [] for i in colindex: app.append(str(row[i]).encode("utf-8") ) list.append(app) # 將字典加入列表中去 return list def main(file_name,colindex): # colindex為需要插入的列 tables = excel_table_bycol(file_name,colindex, table_name=u"Sheet1") t_name = tables.pop(0) key_list = ",".join(tables.pop(0)).encode("utf8") #list轉(zhuǎn)為str sql_line = "INSERT INTO "+t_name+"("+key_list+")VALUE" line = "" for info in tables: content = ",".join(info) if line != "": line =line + ",(" + content + ")" else: line = "("+content+")" sql_line = sql_line + line + ";" with open("./sql_result/insert#" + t_name + ".sql", "w") as f: # 創(chuàng)建sql文件,并開啟寫模式 f.write(sql_line) # 往文件里寫入sql語(yǔ)句 if __name__ == "__main__": file_name = "test.xls" #導(dǎo)入xls文件名 colindex = [0, 1, 2, 3, 4] #需要插入的列 main(file_name,colindex)
生成insert語(yǔ)句SQL文件的Excel格式與update的相同,但是傳入?yún)?shù)方面,因?yàn)椴恍枰^濾條件,所以只需要往數(shù)組中寫入需要插入字段的列數(shù)就好。
希望對(duì)大家有所幫助^_^
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41399.html
摘要:還有一種特殊的情況,合并單元格的可以查看合并單元格的情況第一行第到列合并第到行第列合并前兩個(gè)參數(shù)指行范圍,后兩個(gè)參數(shù)指列范圍。合并單元格的內(nèi)容取值只有合并的第一個(gè)單元格可以獲取到值,其他為空。 文章鏈接:https://mp.weixin.qq.com/s/fojkVO-AB2cCu7FtDtPBjw 之前的文章介紹過關(guān)于寫入excel表格的方法,近期自己在做一個(gè)網(wǎng)站,涉及到讀取ex...
小編寫這篇文章的主要目的,主要是給大家講解關(guān)于python的一些知識(shí),講解的內(nèi)容是關(guān)于如何讀取excel表格的一些詳細(xì)方法,請(qǐng)大家要仔細(xì)閱讀哦?! ∫弧ython讀取excel表格數(shù)據(jù) 1、讀取excel表格數(shù)據(jù)常用操作 importxlrd #打開excel表格 data_excel=xlrd.open_workbook('data/dataset.xlsx')...
小編寫這篇文章的一個(gè)主要目的,主要就是給大家去做一個(gè)解答,接的內(nèi)容主要是利用python去讀取excel表格,那么,怎么才能快速的實(shí)現(xiàn)這個(gè)操作呢?下面就給大家詳細(xì)解答下?! ∫弧ython讀取excel表格數(shù)據(jù) 1、讀取excel表格數(shù)據(jù)常用操作 importxlrd #打開excel表格 data_excel=xlrd.open_workbook('data/datas...
摘要:目錄提交代碼常用命令讀寫文件一常用命令從遠(yuǎn)程倉(cāng)庫(kù)克隆整個(gè)項(xiàng)目代碼列出當(dāng)前目錄所有還沒有被管理的文件和被管理且被修改但還未提交的文件提交全部未跟蹤和修改文件,但是不處理刪除文件將暫存區(qū)里的改動(dòng)給提交到本地的版本庫(kù)參數(shù)表示可以直接輸入后面的 目錄 Git提交代碼常用命令 python 讀寫Excel文件Demo 一、Git常用命令 git clone #從遠(yuǎn)程倉(cāng)庫(kù)克隆整個(gè)項(xiàng)目代碼sh...
摘要:查找了一下,可以操作表的幾個(gè)庫(kù)有以下幾個(gè)這個(gè)是推薦使用的庫(kù),可以讀寫以上格式,以結(jié)尾的文件。這個(gè)支持讀取數(shù)據(jù),支持以結(jié)尾的文件,也就是比較老的格式。這個(gè)和上面的相對(duì)應(yīng),支持寫入書和格式化數(shù)據(jù),支持結(jié)尾的文件格式。 最近需要用到Python來操作excel表,讀取表格內(nèi)容到數(shù)據(jù)庫(kù)。所以就搜索了相關(guān)資料。查找了一下,可以操作excel表的幾個(gè)庫(kù)有以下幾個(gè): openpyxl 這個(gè)是推薦使用...
閱讀 3060·2021-10-12 10:12
閱讀 5394·2021-09-26 10:20
閱讀 1527·2021-07-26 23:38
閱讀 2817·2019-08-30 15:54
閱讀 1649·2019-08-30 13:45
閱讀 1967·2019-08-30 11:23
閱讀 3092·2019-08-29 13:49
閱讀 836·2019-08-26 18:23