国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python使用xlsxwriter實現有向無環圖到Excel的轉換

2020-02-16 00:05:36
字體:
來源:轉載
供稿:網友

本程序將使用字典來構建有向無環圖,然后遍歷圖將其轉換為對應的Excel文件

最終結果如下:

代碼:

(py3) [root@7-o-1 py-dag]# cat test.py from dag import DAGdag = 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')            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尖扎县| 阳泉市| 双鸭山市| 民乐县| 武宣县| 曲沃县| 深州市| 白沙| 盐池县| 防城港市| 巴南区| 潜山县| 额济纳旗| 皋兰县| 江源县| 越西县| 新沂市| 漯河市| 浦北县| 正定县| 常德市| 兰坪| 故城县| 称多县| 万宁市| 阳信县| 上饶市| 新巴尔虎左旗| 新宁县| 墨江| 周宁县| 寿阳县| 杂多县| 武乡县| 钦州市| 易门县| 册亨县| 双柏县| 乐平市| 卢龙县| 江永县|