国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python使用第三方庫xlrd獲取Excel表格中的字段并生成SQL文件

baishancloud / 928人閱讀

摘要:之前寫過一篇使用腳本生成文件的文章,時隔很久這種終于有空寫該庫的兄弟庫,用來讀取文件。

之前寫過一篇使用Python腳本生成Excel文件的文章,時隔很久這種終于有空寫該庫的兄弟庫xlrd,用來讀取Excel文件。
最近被調到電商項目,由于種種原因(設計不完善、SQL語句書寫不規范,甲方太奇葩...槽點太多,就不在這里吐槽了)需要經常進行刷數據操作(批量修改錯誤數據),一般就是寫一寫SQL文件來直接操作,但是在進行了反復的ctrl+c和ctrl+v的操作之后,終于決定寫一個腳本,直接將Excel文件中需要insert和update讀取出來,并生成SQL文件。

項目GitHub地址:https://github.com/sunny0826/...


生成update語句:

#!/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里面的某一頁
    nrows = table.nrows  # 獲取行數
    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")  # 將數據填入一個字典中,同時對數據進行utf-8轉碼,因為有些數據是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:    # 創建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語句

if __name__ == "__main__":
    file_name = "test.xls"  # 導入xls文件名
    where = [0,1,2]         # 條件字段
    colindex = [3, 4]       # 需要插入的列
    main(file_name,where,colindex)

在Excel文件中,第一行行需要update的表名,第二行為字段名,每一列為該字段的對應值,這里可以進行where過濾,只需要修改main函數下where數組內的數字即可,需要update的字段同理,執行后就會生成名字為update#表名.sql的SQL文件。


生成insert語句:

#!/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里面的某一頁
    nrows = table.nrows  # 獲取行數
    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轉為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:  # 創建sql文件,并開啟寫模式
        f.write(sql_line)  # 往文件里寫入sql語句

if __name__ == "__main__":
    file_name = "test.xls"          #導入xls文件名
    colindex = [0, 1, 2, 3, 4]      #需要插入的列
    main(file_name,colindex)

生成insert語句SQL文件的Excel格式與update的相同,但是傳入參數方面,因為不需要過濾條件,所以只需要往數組中寫入需要插入字段的列數就好。

希望對大家有所幫助^_^

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41399.html

相關文章

  • python xlrd 讀取excel

    摘要:還有一種特殊的情況,合并單元格的可以查看合并單元格的情況第一行第到列合并第到行第列合并前兩個參數指行范圍,后兩個參數指列范圍。合并單元格的內容取值只有合并的第一個單元格可以獲取到值,其他為空。 文章鏈接:https://mp.weixin.qq.com/s/fojkVO-AB2cCu7FtDtPBjw 之前的文章介紹過關于寫入excel表格的方法,近期自己在做一個網站,涉及到讀取ex...

    chaos_G 評論0 收藏0
  • python實現讀取excel表格詳解方法

      小編寫這篇文章的主要目的,主要是給大家講解關于python的一些知識,講解的內容是關于如何讀取excel表格的一些詳細方法,請大家要仔細閱讀哦。  一、python讀取excel表格數據  1、讀取excel表格數據常用操作  importxlrd   #打開excel表格   data_excel=xlrd.open_workbook('data/dataset.xlsx')...

    89542767 評論0 收藏0
  • 如何利用python讀取excel表格?下文給大家詳細解答

      小編寫這篇文章的一個主要目的,主要就是給大家去做一個解答,接的內容主要是利用python去讀取excel表格,那么,怎么才能快速的實現這個操作呢?下面就給大家詳細解答下。  一、python讀取excel表格數據  1、讀取excel表格數據常用操作  importxlrd   #打開excel表格   data_excel=xlrd.open_workbook('data/datas...

    89542767 評論0 收藏0
  • Windows環境 Git提交代碼到Github(附:python 讀寫Excel文件Demo)

    摘要:目錄提交代碼常用命令讀寫文件一常用命令從遠程倉庫克隆整個項目代碼列出當前目錄所有還沒有被管理的文件和被管理且被修改但還未提交的文件提交全部未跟蹤和修改文件,但是不處理刪除文件將暫存區里的改動給提交到本地的版本庫參數表示可以直接輸入后面的 目錄 Git提交代碼常用命令 python 讀寫Excel文件Demo 一、Git常用命令 git clone #從遠程倉庫克隆整個項目代碼sh...

    Drinkey 評論0 收藏0
  • Python 讀寫excel文件

    摘要:查找了一下,可以操作表的幾個庫有以下幾個這個是推薦使用的庫,可以讀寫以上格式,以結尾的文件。這個支持讀取數據,支持以結尾的文件,也就是比較老的格式。這個和上面的相對應,支持寫入書和格式化數據,支持結尾的文件格式。 最近需要用到Python來操作excel表,讀取表格內容到數據庫。所以就搜索了相關資料。查找了一下,可以操作excel表的幾個庫有以下幾個: openpyxl 這個是推薦使用...

    plus2047 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<