Python處理Excel文件實例代碼
因為工作需求,需要審核一部分query內(nèi)容是否有效,query儲存在Excel中,文本內(nèi)容為頁面的Title,而頁面的URL以HyperLink的格式關(guān)聯(lián)到每個Cell。
于是本能的想到用Python讀取Excel文件之后進(jìn)行文本分析,之后對每個鏈接進(jìn)行一次HttpRequest,通過分析HttpResponse的內(nèi)容來判斷當(dāng)前鏈接是否有效。
于是上網(wǎng)搜了下,發(fā)現(xiàn)比較主流的是用xlrd的插件,但是實際使用過程中發(fā)現(xiàn),無論如何,最終獲取的hyperlink_map值一直都是None,也沒空去分析到底是為什么。最后經(jīng)過搜索發(fā)現(xiàn)一個叫xlwings的Python庫,可以有效使用。
具體的代碼如下:
# -*- coding=utf-8 -*- import xlwings as xw import urllib import sys type = sys.getfilesystemencoding() def get_html(url): page = urllib.urlopen(url) html = page.read() return unzip(html) ## Debug的時候發(fā)現(xiàn)無論怎樣做Decode,最后的結(jié)果都是亂碼 ## 后來發(fā)現(xiàn)是因為對應(yīng)的網(wǎng)頁做了壓縮處理,所以需要對獲取的網(wǎng)頁內(nèi)容手動解壓縮 def unzip(data): import gzip import StringIO data = StringIO.StringIO(data) gz = gzip.GzipFile(fileobj=data) data = gz.read() gz.close() return data wb = xw.Book(r"C:\Users\hasee\Desktop\Test.xlsx") main_data = wb.sheets["Sheet2"] ## 通過獲取Last Cell來確定當(dāng)前Sheet的有效行數(shù)與列數(shù) rownum = main_data.range('A1').current_region.last_cell.row colnum = main_data.range('A1').current_region.last_cell.column ## 定位column對應(yīng)的列 col_dict = {"2":"B","3":"C","4":"D","5":"E","6":"F"} for row in range(1, rownum + 1): for col in range(2, colnum + 1): query = main_data.range(row, 1).value cell = main_data.range(row, col) link = cell.hyperlink html = get_html(link) if "error-container" in html: print "%s,%s,%s,%s" % (query, col_dict.get(str(col))+str(row), cell.value, cell.hyperlink) ## 對無效的鏈接所屬的Cell染色,直接寫入文件 cell.color = (253,218,4)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python?Pygame實戰(zhàn)之五款童年經(jīng)典游戲合集
本文為大家總結(jié)了五款利用Python+Pygame實現(xiàn)的童年經(jīng)典游戲:推箱子、滑雪、八分音符醬、保衛(wèi)蘿卜和飛機(jī)大戰(zhàn),快跟隨小編一起學(xué)習(xí)一下2022-04-04解決pycharm運(yùn)行時interpreter為空的問題
今天小編就為大家分享一篇解決pycharm運(yùn)行時interpreter為空的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10手把手教你將Flask應(yīng)用封裝成Docker服務(wù)的實現(xiàn)
這篇文章主要介紹了手把手教你將Flask應(yīng)用封裝成Docker服務(wù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08