xlrd處理excel,合并單元格+識別表頭

因為工作需要對excel做了系列的處理,對于其中的幾個功能實現(xiàn)頗費了一些精力饭寺,自己手動寫了一些function阻课。

合并單元格的split

首先獲得這張sheet中所有的合并單元格,再依次循環(huán)每一個艰匙,因為合并單元格都是返回其第一個行列的值限煞,所以只需要返回該值即可。

def unmergedValue(rowx, colx, thesheet):
    '''
    Split merged cells.
    '''

    for crange in thesheet.merged_cells:
        rlo, rhi, clo, chi = crange
        if rowx in range(rlo, rhi):
            if colx in range(clo, chi):
                return thesheet.cell_value(rlo, clo)
    #if you reached this point, it's not in any merged cells
    return thesheet.cell_value(rowx, colx)

表頭拆分

這里用到了字典占位的思想员凝,以及利用了yield閱后即焚的效果
首先要有所有的表頭list署驻,在這個list中的元素,即被分類

def split_tab_title(header, utitle):
    '''
    Split the separate tables' header from the title row of an excel sheet.
    '''

    tmp_dict = {i: None for i in header}
    tmp_tab = {}

    ntitle = [i.lower().replace(' ', '') for i in utitle]
    unamelist = [i.lower().replace(' ', '') for i in header]

    for idx, name in enumerate(ntitle):
        if name in unamelist:
            pos = unamelist.index(name)
            element = header[pos]
            #try:
            if not tmp_dict[element]:
                tmp_dict[element] = element
                tmp_tab[element] = idx
            else:
                yield tmp_tab
                tmp_dict = {i: None for i in header}
                tmp_tab = {}
                tmp_dict[element] = element
                tmp_tab[element] = idx
        #except KeyError:
        #print(element + ' is not header type')
    yield tmp_tab

確定好了表頭的index之后健霹,再逐一讀行旺上,獲得其對應(yīng)的元素

def get_tab_value(values, record):
    '''
    Get each line info for each table value.
    '''

    record_dict = {}
    for tab in record:
        for name, idx in tab.items():
            record_dict[name] = values[idx]
        yield record_dict

此處代碼內(nèi)部的dict只要更新了,key不變糖埋,但value會改變宣吱,只做循環(huán)的時候看不出來,但是瞳别,如果轉(zhuǎn)成list征候,就會發(fā)現(xiàn)只能迭代最后一次的value。故代碼需要修改祟敛,如下才是正確的代碼疤坝。

def get_tab_value(values, record):
    '''
    Get each line info for each table value.
    '''

    record_dict = {}

    for tab in record:
        if not record_dict:
            for name, idx in tab.items():
                record_dict[name] = values[idx]
        else:
            yield record_dict
            record_dict = {}
            for name, idx in tab.items():
                record_dict[name] = values[idx]
    yield record_dict

此處有個大坑,就是yield是只能迭代一次的馆铁,下次再使用它已經(jīng)空了,所以要么用list把record存好跑揉,要么每次迭代這個record。

records = list(split_tab_title(header, utitle))  ####can be iterable more than once    
for row_index in range(title_row_index + 1, sheet.nrows):
     tab_record = get_tab_value(values, records)              

或者埠巨,每次循環(huán)都生成generator历谍,其實也不占內(nèi)存

for row_index in range(title_row_index + 1, sheet.nrows):
    records = split_tab(header,mytitle)  ###generator only use once
    tab_record = get_tab_value(values, records) 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市乖订,隨后出現(xiàn)的幾起案子扮饶,更是在濱河造成了極大的恐慌具练,老刑警劉巖乍构,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扛点,居然都是意外死亡哥遮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門陵究,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眠饮,“玉大人,你說我怎么就攤上這事铜邮∫钦伲” “怎么了寨蹋?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長扔茅。 經(jīng)常有香客問我已旧,道長,這世上最難降的妖魔是什么召娜? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任运褪,我火速辦了婚禮,結(jié)果婚禮上玖瘸,老公的妹妹穿的比我還像新娘秸讹。我一直安慰自己,他們只是感情好雅倒,可當(dāng)我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布璃诀。 她就那樣靜靜地躺著,像睡著了一般蔑匣。 火紅的嫁衣襯著肌膚如雪文虏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天殖演,我揣著相機與錄音氧秘,去河邊找鬼。 笑死趴久,一個胖子當(dāng)著我的面吹牛丸相,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播彼棍,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼灭忠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了座硕?” 一聲冷哼從身側(cè)響起弛作,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎华匾,沒想到半個月后映琳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡蜘拉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年萨西,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旭旭。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡谎脯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出持寄,到底是詐尸還是另有隱情源梭,我是刑警寧澤娱俺,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站废麻,受9級特大地震影響矢否,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脑溢,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一僵朗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屑彻,春花似錦验庙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至搏恤,卻和暖如春违寿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熟空。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工藤巢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人息罗。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓掂咒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親迈喉。 傳聞我的和親對象是個殘疾皇子绍刮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,876評論 2 361

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

  • 一直沒能說服公司小伙伴不要用合并單元格,因此我接收到的原始表格總是充滿了各種合并單元格挨摸。最頭痛的是列名有合并的孩革。比...
    PowerQuery閱讀 4,914評論 5 9
  • ??DOM(文檔對象模型)是針對 HTML 和 XML 文檔的一個 API(應(yīng)用程序編程接口)膝蜈。 ??DOM 描繪...
    霜天曉閱讀 3,657評論 0 7
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,836評論 0 38
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 13,762評論 1 92
  • 人生品牌打造源于自我介紹:王者風(fēng)范的王澈圈,光明磊落的磊彬檀,性格瀟灑隨意,自由自在瞬女,無拘無束,蔑視一切規(guī)則卻心存善念努潘,望...
    探索最真實的世界閱讀 262評論 0 0