您好,登錄后才能下訂單哦!
本文章向大家介紹如何在python中利用xlsxwriter將有向無環圖轉換成Excel,主要包括如何在python中利用xlsxwriter將有向無環圖轉換成Excel的使用實例、應用技巧、基本知識點總結和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下。
Python是一種編程語言,內置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智能,Web開發等。
代碼:
(py3) [root@7-o-1 py-dag]# cat test.py from dag import DAG dag = DAG() dag.from_dict({'a': ['b', 'c','e'], 'b': ['d','g'], 'c': ['d'], 'g':['i'], 'i':[], 'e':['gh','ox','wer'], 'gh':[], 'ox':[], 'wer':[], 'd': []}) def generate_excel(dag, row_start,col,excel_file):#參數分別為有向無環圖圖、開始寫入的行,開始寫入列,以及文件名 import xlsxwriter#導入Excel操作模塊 workbook = xlsxwriter.Workbook(excel_file)#創建Excel文件 worksheet = workbook.add_worksheet('testsheet')#創建工作簿 #以下為部分格式的預定義(包含合并行格式,數字日期格式等) merge_format = workbook.add_format({ 'bold': 1, 'border': 1, 'align': 'left', 'valign': 'vcenter'}) cell_format = workbook.add_format({ 'bold': 1, 'border': 1, 'align': 'top', 'valign': 'left'}) date_format = workbook.add_format({ 'bold': 1, 'border': 1, 'align': 'top', 'valign': 'left', 'num_format': 'd mmmm yyyy'}) num_format = workbook.add_format({ 'bold': 1, 'border': 1, 'align': 'top', 'valign': 'left', 'num_format': '0.0000%'}) def get_node_leaves(node,ret = []):#用來返回一個節點的所有最終葉子結點 downs = dag.downstream(node)#先獲取當前節點的下一級節點 if len(downs) < 1:#如果無下一級節點將直接將此節點添加到列表 ret.append(node) else:#負責循環遞歸,將所有葉子結點添加到列表 for inner_node in downs: get_node_leaves(inner_node,ret) return ret#返回節點列表 def dag_visit(dag, node, r_idx,col): if node not in all_leaves: downstreams = dag.downstream(node) node_leaves = len(get_node_leaves(node,[]))#獲取所有葉子的個數,用來判斷是否進行合并行操作 r_idx_end = r_idx+node_leaves-1 if len(downstreams) == 1:#對于只有一個子節點的node應用write worksheet.write(col+str(r_idx), node,cell_format) else:#對于多余一個子節點的node應用merge_range worksheet.merge_range(col+str(r_idx)+':'+col+str(r_idx_end), node,merge_format) col = chr(ord(col)+1)#列+1,開始進入子節點遍歷 downstreams_len = len(downstreams) if len(downstreams) >0: row_next = r_idx for downstream in downstreams: subnode_leaves = len(get_node_leaves(downstream,[]))#獲取當前節點的所有葉子用來為下一個節點的填充確定位移 if downstream in all_leaves: subnode_leaves = 1 if col == merge_to:#對于子節點為葉子并且跨度為1應用write worksheet.write(col+str(row_next), downstream,cell_format) else:#對于子節點為葉子結點但是跨度大于1應用merge_range merge_rg = col+str(row_next) +':'+merge_to+str(row_next) worksheet.merge_range(merge_rg, downstream,merge_format) else:#子節點非葉子結點進行遞歸遍歷 dag_visit(dag, downstream, row_next,col) #每訪問一個子結點需要將row值增加方便下一個node正確填充,row的值是前一個結點的子節點個數 row_next += subnode_leaves else: print(node) head_node = dag.ind_nodes()[0] all_leaves = dag.all_leaves() dag_depth = dag.dag_depth(head_node,0) merge_to= chr(ord(col)+dag_depth)#對于合并列的終結列index dag_visit(dag, head_node, row_start,col)#傳遞根節點進行遍歷 workbook.close() generate_excel(dag,1,'A','test.xlsx')
到此這篇關于如何在python中利用xlsxwriter將有向無環圖轉換成Excel的文章就介紹到這了,更多相關的內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。