python實現(xiàn)excel轉(zhuǎn)json

前言

工作項目中,合作方提供了一張Excel的數(shù)據(jù)表厅目,需要將其轉(zhuǎn)成 Json 文件贴捡,正好最近學習了python忽肛,就決定用 python 來試試水,實現(xiàn)這個功能烂斋。

工作環(huán)境

  • python 3.6
  • python 對 Excel 的操作屹逛,需要依賴 xlrd, xlwt 這兩個模塊,xlrd 是讀 Excel 的模塊源祈,xlwt 是寫 Excel 的模塊
  • pip install xlrd
  • pip install xlwt

拿到 Excel 表仔細掃了一眼煎源,我發(fā)現(xiàn)表格中有一列數(shù)據(jù)基本就沒有,但是這一列又是比較重要的一項香缺,內(nèi)容被包含在了另一列的數(shù)據(jù)中手销,所以我決定先將 Excel 表重新用 python 寫一遍,所以將 xlwt 包也加了進來图张,如果只是讀 Excel 文件锋拖,只需要 xlrd 就夠了。

xlrd

打開Excel文件讀取數(shù)據(jù)

data = xlrd.open_workbook(file_path)    # 返回一個xlrd.book.Book實例

獲取 book 中一個工作表

table = data.sheets()[0]                    #通過索引順序獲取祸轮,返回xlrd.sheet.Sheet實例
table = data.sheet_by_index(sheet_indx))    #通過索引順序獲取兽埃,返回xlrd.sheet.Sheet實例
table = data.sheet_by_name(sheet_name)      #通過名稱獲取,返回xlrd.sheet.Sheet實例

獲取 book 中所有工作表的名稱

 names = data.sheet_names()    #返回book中所有工作表名字的集合list

獲取該 sheet 中的有效行數(shù)

nrows = table.nrows

獲取該行中所有的單元格對象組成的集合list

table.row(rowx)     #返回的帶有數(shù)據(jù)的類型

獲取該行中所有單元格數(shù)據(jù)組成的集合list

table.row_values(rowx, start_colx=0, end_colx=None)

xlwt

新建 excel 文件

file = xlwt.Workbook(encoding="utf-8")  #默認是 ascii

新建 sheet 表

table = file.add_sheet(sheet_name, cell_overwrite_ok=False) #返回xlwt.Worksheet.Worksheet實例适袜,如果需要對一個單元格重復(fù)操作柄错,需要將 cell_overwrite_ok=True

向 x 行 y 列 寫入數(shù)據(jù) value

table.write(x, y, value)

保存文件

file.save(file_name)

對Excel表添加數(shù)據(jù)

def completion_excel():
    file_path = input("輸入需要操作的Excel文件的絕對路徑>>>")
    data = achieve_data(file_path)
    if data is not None:
        worksheets = data.sheet_names()
        print("包含的表單:")
        for index, sheet in enumerate(worksheets):
            print(index, sheet)
        choose = input("請輸入表單對應(yīng)的編號>>>")
        table = data.sheet_by_index(int(choose))

        # 創(chuàng)建Excel表
        workbook = xlwt.Workbook(encoding="utf-8")
        # 創(chuàng)建 sheet
        worksheet = workbook.add_sheet("sheet1")
        # 先寫表頭
        titles = table.row_values(0)
        for k, v in enumerate(titles):
            worksheet.write(0, k, v)
        for i in range(1, table.nrows):
            row = table.row_values(i)
            # 補全年級的表
            if row[4] == "":
                course = row[6]
                if "年級" in course:
                    n = course.index("年級")
                    row[4] = course[n-1:n+3]
                else:
                    row[4] = "初中"

            for x, y in enumerate(row):
                worksheet.write(i, x, y)
        workbook.save("Excel_test.xls")

將新的Excel文件轉(zhuǎn)成Json

def excel2json():
    file_path = input("輸入需要轉(zhuǎn)成Json的Excel文件的路徑>>>")
    data = achieve_data(file_path)
    if data is not None:
        # 抓取所有sheet頁的名稱
        worksheets = data.sheet_names()
        print("包含的表單:")
        for index, sheet in enumerate(worksheets):
            print(index, sheet)
        choose = input("請輸入表單對應(yīng)的編號>>>")
        table = data.sheet_by_index(int(choose))
        # 獲取到數(shù)據(jù)的表頭
        titles = table.row_values(0)
        result = {}
        result["middle_school"] = []
        # excel文件表有 10196 行,所以做10196次循環(huán)
        for i in range(1, table.nrows):
            row = table.row_values(i)
            tmp = {}
            for index, title in enumerate(titles):
                if title == "id":
                    tmp[title] = int(row[index])
                else:
                    tmp[title] = row[index]
            result["middle_school"].append(tmp)
        with open("middle_school.txt", 'w', encoding='utf-8') as f:
            json.dump(result, f)

完整代碼地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苦酱,一起剝皮案震驚了整個濱河市售貌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疫萤,老刑警劉巖颂跨,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扯饶,居然都是意外死亡恒削,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門尾序,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钓丰,“玉大人,你說我怎么就攤上這事每币“吡唬” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵脯爪,是天一觀的道長则北。 經(jīng)常有香客問我矿微,道長,這世上最難降的妖魔是什么尚揣? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任涌矢,我火速辦了婚禮,結(jié)果婚禮上快骗,老公的妹妹穿的比我還像新娘娜庇。我一直安慰自己,他們只是感情好方篮,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布名秀。 她就那樣靜靜地躺著,像睡著了一般藕溅。 火紅的嫁衣襯著肌膚如雪匕得。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天巾表,我揣著相機與錄音汁掠,去河邊找鬼。 笑死集币,一個胖子當著我的面吹牛考阱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鞠苟,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼乞榨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了当娱?” 一聲冷哼從身側(cè)響起吃既,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎趾访,沒想到半個月后态秧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體董虱,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡扼鞋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了愤诱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片云头。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖淫半,靈堂內(nèi)的尸體忽然破棺而出溃槐,到底是詐尸還是另有隱情,我是刑警寧澤科吭,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布昏滴,位于F島的核電站猴鲫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谣殊。R本人自食惡果不足惜拂共,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姻几。 院中可真熱鬧宜狐,春花似錦、人聲如沸蛇捌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽络拌。三九已至俭驮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盒音,已是汗流浹背表鳍。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留祥诽,地道東北人譬圣。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像雄坪,于是被迫代替她去往敵國和親厘熟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容