A. python操作Excel
因為工作上的需要,最近經常用Python對報表做Excel導入導出,特此做個筆記,方便日後查看。
首先我選擇了Python-Excel下的xlrd和xlwt。需要注意的是,xlwt只支持生成xls,暫時還不支持xlsx。
讀取主要是用到這兩個方法,我想到就繼續補充,更多用法請查閱官方文檔
表格樣式設置有XFStyle和easyxf兩種方式
列寬在Excel裡面用字元寬頻來表示。xlwt以字元'0'的1/256寬為一個單位,默認表格寬度為2962,大致相當於11個字元寬度。設置Excel的列寬就大致等於,字元寬度 * 256 + 182 (有待繼續考證,精度目前還行)
行高再Excel裡面一般用磅來表示,磅 * 20 即是xlwt的數值。字體的大小也是用磅來設置。
設置頁面方向
使用num_format_str來設置單元格類型。
特別是遇到時間的時候,Excel會自動轉為May-2017這種格式,這時候就要設置為文本類型,防止自動轉換
B. 怎樣在Excel中使用python腳本
在Excel中准備調用的python代碼:
def merge_sort_unique(lists):
s = set()
for L in lists:
s.update(L)
return sorted(s)
任意在本地建立一個目錄,並保存這個代碼並命名為Methods.py。我們一步步看看如何從Excel的工作表中如何調用這個腳本。打開Excel,填寫一些數據以便提供python腳本處理,並保持這個表格於剛才的python腳本在同一目錄下。你的工作表應該如下:
現在,備調用python腳本,創建一個新的模塊(Insert | Mole)並敲以下VBA代碼:
Function msu(lists As Range)
Set methods = PyMole("Methods", AddPath:=ThisWorkbook.Path)
Set result = PyCall(methods, "merge_sort_unique", PyTuple(lists.Value2))
msu = WorksheetFunction.Transpose(PyVar(result))
ExitFunction
EndFunction
C. Jquery從Python後台獲取了一個二維數組,如何以表格形式顯示在頁面
假設你二維數組。a[][]
$table = $('table');
$.each(a,function(i)){
$.each(a[i],function(j)){
$table.append('<tr><td>' + a[i][j] + '</td></tr>')
}
}
D. 用Python tkinter 做一個圖形界面表格需要帶框架線
tkinter中可以用Treeview 顯示數據,相當於table
E. 用python編程更新一個電子表格
循環遍歷A,找到Garlic Celery 和lemons 寫入B欄位,讀取出C欄位, D=B*C
...........
F. python將表格展示的數據生成圖片
最近有一個需求,在界面對表格進行自動截圖,然後將圖片存起來
第一種: selenium +chromedirver + pillow
使用自動化工具,網頁截圖, 通過元素定位到具體位置,pillow進行裁剪得出最理想結果,此方案還是存在很大誤差,因為表格數據數量非固定的,計算誤差很大,難以精準
第二種: prettytable + pillow
通過prettytable將數據生成簡單表格布局,通過pillow 生成圖片,這個方案簡單容易,但是表格樣式過於醜陋,暫不考慮
第三種: html-table + imgkit
通過html-table將數據生成帶樣式的html文件,然後使用imgkit 轉換成圖片,該方案是目前最理想的
1、環境安裝
2、demo演示
imgkit官方文檔: https://github.com/jarrekk/imgkit
G. python提取excel表中的數據兩列
1、首先打開excel表格,在單元格中輸入兩列數據,需要將這兩列數據進行比對相同數據。
2、然後在C1單元格中輸入公式:=VLOOKUP(B1,A:A,1,0),意思是比對B1單元格中A列中是否有相同數據。
3、點擊回車,即可將公式的計算結果顯示出來,可以看到C1中顯示的是B1在A列中找到的相同數據。
4、將公式向下填充,即可發現C列中顯示出的數字即為有相同數據的,顯示「#N/A」的為沒有找到匹配數據的。
5、將C1-C4中的數據進行復制並粘貼成數值,即可完成相同數據的提取操作。
在實際研究中,我們經常需要獲取大量數據,而這些數據很大一部分以pdf表格的形式呈現,如公司年報、發行上市公告等。面對如此多的數據表格,採用手工復制黏貼的方式顯然並不可取。那麼如何才能高效提取出pdf文件中的表格數據呢?
Python提供了許多可用於pdf表格識別的庫,如camelot、tabula、pdfplumber等。綜合來看,pdfplumber庫的性能較佳,能提取出完整、且相對規范的表格。因此,本推文也主要介紹pdfplumber庫在pdf表格提取中的作用。
作為一個強大的pdf文件解析工具,pdfplumber庫可迅速將pdf文檔轉換為易於處理的txt文檔,並輸出pdf文檔的字元、頁面、頁碼等信息,還可進行頁面可視化操作。使用pdfplumber庫前需先安裝,即在cmd命令行中輸入:
pip install pdfplumber
pdfplumber庫提供了兩種pdf表格提取函數,分別為.extract_tables( )及.extract_table( ),兩種函數提取結果存在差異。為進行演示,我們網站上下載了一份短期融資券主體信用評級報告,為pdf格式。任意選取某一表格,其界面如下:
接下來,我們簡要分析兩種提取模式下的結果差異。
(1).extract_tables( )
可輸出頁面中所有表格,並返回一個嵌套列表,其結構層次為table→row→cell。此時,頁面上的整個表格被放入一個大列表中,原表格中的各行組成該大列表中的各個子列表。若需輸出單個外層列表元素,得到的便是由原表格同一行元素構成的列表。例如,我們執行如下程序:
輸出結果:
(2).extract_table( )
返回多個獨立列表,其結構層次為row→cell。若頁面中存在多個行數相同的表格,則默認輸出頂部表格;否則,僅輸出行數最多的一個表格。此時,表格的每一行都作為一個單獨的列表,列表中每個元素即為原表格的各個單元格內容。若需輸出某個元素,得到的便是具體的數值或字元串。如下:
輸出結果:
在此基礎上,我們詳細介紹如何從pdf文件中提取表格數據。其中一種思路便是將提取出的列表視為一個字元串,結合Python的正則表達式re模塊進行字元串處理後,將其保存為以標准英文逗號分隔、可被Excel識別的csv格式文件,即進行如下操作:
輸出結果:
盡管能獲得完整的表格數據,但這種方法相對不易理解,且在處理結構不規則的表格時容易出錯。由於通過pdfplumber庫提取出的表格數據為整齊的列表結構,且含有數字、字元串等數據類型。因此,我們可調用pandas庫下的DataFrame( )函數,將列表轉換為可直接輸出至Excel的DataFrame數據結構。DataFrame的基本構造函數如下:
DataFrame([data,index, columns])
三個參數data、index和columns分別代表創建對象、行索引和列索引。DataFrame類型可由二維ndarray對象、列表、字典、元組等創建。本推文中的data即指整個pdf表格,提取程序如下:
其中,table[1:]表示選定整個表格進行DataFrame對象創建,columns=table[0]表示將表格第一行元素作為列變數名,且不創建行索引。輸出Excel表格如下:
通過以上簡單程序,我們便提取出了完整的pdf表格。但需注意的是,面對不規則的表格數據提取,創建DataFrame對象的方法依然可能出錯,在實際操作中還需進行核對。
關於我們
微信公眾號「爬蟲俱樂部」分享實用的stata命令,歡迎轉載、打賞。爬蟲俱樂部是由李春濤教授領導下的研究生及本科生組成的大數據分析和數據挖掘團隊。
投稿要求:
1)必須原創,禁止抄襲;
2)必須准確,詳細,有例子,有截圖;
H. python怎樣做html的表格
現要實現python製作html格式的表格,利用Python對字元串str.format()格式化操作進行處理,在日常對CVS格式文件處理過程當中,經常會將CVS格式文件進行轉換,在正式場合是程序讀取CVS文件進行轉換並輸出到html格式的文件當中,但現在只是實現一下轉換的過程,需要輸入以逗號分隔的數據。
在設計程式的時候,需要先定義一下整個代碼的框架,首先我們要定義一個主函數main(),雖然Python沒有規定入口函數,一般在正式的開發中都設計了一個main()函數作為程序的入口函數,或許這是一種規范吧。然後我們在定義一個列印表頭的方法print_head(),並在主函數里進行調用。再定義一個列印表尾的方法print_end(),也在主函數中進行調用。定義print_line()為列印表格行,定義extract_field()處理cvs行數據轉換為list集合數據。最後再定義一個處理特殊符號的方法escape_html(),因為在html代碼中為了避免與它的標簽沖突,特要進行特殊符號的轉換,如&-->&
還有就是對長度過長的數據要進行處理並用...代替
源代碼:
#Author Tandaly
#Date 2013-04-09
#File Csv2html.py
#主函數
def main():
print_head()
maxWidth = 100
count = 0
while True:
try:
line = str(input())
if count == 0:
color = "lightgreen"
elif count%2 == 0:
color = "white"
else:
color = "lightyellow"
print_line(line, color, maxWidth)
count += 1
except EOFError:
break
print_end()
#列印表格頭
def print_head():
print("")
#列印錶行
def print_line(line, color, maxWidth):
tr = "".format(color)
tds = ""
if line is not None and len(line) > 0:
fields = axtract_fields(line)
for filed in fields:
td = "{0}".format(filed if (len(str(filed)) <= maxWidth) else
(str(filed)[:100] + "..."))
tds += td
tr += "{0}
".format(tds)
print(tr)
#列印表格尾
def print_end():
print("")
#抽取行值
def axtract_fields(line):
line = escape_html(line)
fields = []
field = ""
quote = None
for c in line:
if c in "\"":
if quote is None:
quote = c
elif quote == c:
quote = None
continue
if quote is not None:
field += c
continue
if c in ",":
fields.append(field)
field = ""
else:
field += c
if len(field) > 0:
fields.append(field)
return fields
#處理特殊符號
def escape_html(text):
text = text.replace("&", "&")
text = text.replace(">", ">")
text = text.replace("<", "<")
return text
#程序入口
if __name__ == "__main__":
main()
運行結果:
>>>
"nihao","wo"
nihaowo
"sss","tandaly"
...tandaly
"lkkkkkkkkkkksdfssssssssssssss",
34
...34
I. Python處理Excel效率高十倍(下篇)通篇硬幹貨,再也不用加班啦
《用Python處理Excel表格》下篇來啦!
身為工作黨或學生黨的你,平日里肯定少不了與Excel表格打交道的機會。當你用Excel處理較多數據時,還在使用最原始的人工操作嗎?現在教你如何用Python處理Excel,從此處理表格再也不加班,時間縮短數十倍!
上篇我們進行了一些事前准備,目的是用Python提取Excel表中的數據。而這一篇便是在獲取數據的基礎上,對Excel表格的實操處理。
第9行代碼用來指定創建的excel的活動表的名字:
·不寫第9行,默認創建sheet
·寫了第9行,創建指定名字的sheet表
第9行代碼,通過給單元格重新賦值,來修改單元格的值
第9行代碼的另一種寫法sheet['B1'].value = 'age'
第10行代碼,保存時如果使用原來的(第7行)名字,就直接保存;如果使用了別的名字,就會另存為一個新文件
插入有效數據
使用append()方法,在原來數據的後面,按行插入數據
·insert_rows(idx=數字編號, amount=要插入的行數),插入的行數是在idx行數的下方插入
·insert_cols(idx=數字編號, amount=要插入的列數),插入的位置是在idx列數的左側插入
·delete_rows(idx=數字編號, amount=要刪除的行數)
·delete_cols(idx=數字編號, amount=要刪除的列數)
move_range(「數據區域」,rows=,cols=):正整數為向下或向右、負整數為向左或向上
舉個例子:
openpyxl.styles.Font(name=字體名稱,size=字體大小,bold=是否加粗,italic=是否斜體,color=字體顏色)
其中,字體顏色中的color是RGB的16進製表示
再者,可以使用for循環,修改多行多列的數據,在這里介紹了獲取的方法
Alignment(horizontal=水平對齊模式,vertical=垂直對齊模式,text_rotation=旋轉角度,wrap_text=是否自動換行)
水平對齊:『distributed』,『justify』,『center』,『left』, 『centerContinuous』,'right,『general』
垂直對齊:『bottom』,『distributed』,『justify』,『center』,『top』
當然,你仍舊可以調用for循環來實現對多行多列的操作
設置行列的寬高:
·row_dimensions[行編號].height = 行高
·column_dimensions[列編號].width = 列寬
合並單元格有下面兩種方法,需要注意的是,如果要合並的格子中有數據,即便python沒有報錯,Excel打開的時候也會報錯。
merge_cells(待合並的格子編號)
merge_cells(start_row=起始行號,start_column=起始列號,end_row=結束行號,end_column=結束列號)
拆分單元格的方法同上
unmerge_cells(待合並的格子編號)
unmerge_cells(start_row=起始行號,start_column=起始列號,end_row=結束行號,end_column=結束列號)
create_sheet(「新的sheet名」):創建一個新的sheet表
第11行,使用title修改sheet表的名字
remove(「sheet名」):刪除某個sheet表
要刪除某sheet表,需要激活這個sheet表,即:將其作為活動表(關於活動表的定義請看前面文章開頭寫的有)下面8~11行代碼展示了原始活動表與手動更換活動表,第13行代碼刪掉活動表
背景知識
numpy與pandas
NumPy是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫;pandas 是基於NumPy 的一種工具,該工具是為解決數據分析任務而創建的,我們需要利用Pandas進行Excel的合並
1.下面的代碼生成了一個5行3列的包含15個字元的嵌套列表
(注意,第4行代碼:15是等於35的,如果是15對應43,或者16對應5*3都會報錯)
(注意,第5行代碼,雖然5行3列是15個數據,但是可以指定數據從1開頭,到16結束)
2.添加表頭
使用pandas庫的DataFrame來添加表頭。關於列印的結果,把最左側的一列去掉之後會發現結果很和諧,這是因為最左側的一列代錶行號。此時xx變數的類型是
xlsxwriter模塊一般是和xlrd模塊搭配使用的,
xlsxwriter:負責寫入數據,
xlrd:負責讀取數據。
1.創建一個工作簿
2.創建sheet表
3.寫入數據
J. 如何用Python將表格一整行條件格式化突出顯示特定值
實現思路其它比較簡單
用python打開你的excel文件,
循環遍歷每個單元各的內容。
檢查這個單元格中的值是否符合你的條件。
如符合條件,單元格的背景色設為淡紅色。
不符合條件,單無格的背景色設為淡綠色。
如有其它問題還可以追問。