读取excel,excel中第0列和第0行的数值代表站点位置,其代表从左到右的120个节点,excel中的数值代表行数的节点到列数代表节点的距离同时将其这两个节点相连,并表示距离,给出连接图的代码
时间: 2024-03-01 13:55:04 浏览: 83
可以使用`openpyxl`库读取Excel文件,以下是生成连接图的代码:
```python
import openpyxl
# 读取Excel文件
workbook = openpyxl.load_workbook('example.xlsx')
worksheet = workbook.active
# 创建节点列表
nodes = []
for row in worksheet.iter_rows(min_row=2, min_col=2, max_row=121, max_col=121):
for cell in row:
nodes.append(cell.value)
# 创建连接图的边列表
edges = []
for row in worksheet.iter_rows(min_row=2, min_col=2, max_row=121, max_col=121):
for cell in row:
# 当前单元格的行和列
row_index = cell.row - 1
col_index = cell.column - 1
# 每行最后一个节点不与右边相邻的节点相连
if col_index < 120:
distance = cell.value
edges.append((str(nodes[row_index-1]), str(nodes[row_index-1+10]), distance))
# 最后一行不与下面相邻的行相连
if row_index < 110:
distance = worksheet.cell(row=cell.row+1, column=cell.column).value
edges.append((str(cell.value), str(worksheet.cell(row=cell.row+1, column=cell.column).value), distance))
# 输出连接图的代码
print("digraph {")
for node in nodes:
print(" " + str(node) + ";")
for edge in edges:
print(" " + edge[0] + " -> " + edge[1] + " [label=" + str(edge[2]) + "];")
print("}")
```
其中,Excel文件必须满足以下条件:
- 第0列和第0行的数值代表站点位置,从左到右依次编号为1到120;
- 第1行和第1列的单元格不包含任何连接信息;
- 从第2行和第2列开始,每个单元格代表该行的节点到该列的节点的距离,距离必须为数字类型。
输出的连接图代码可以直接用Graphviz绘图软件生成图形化的连接图。
阅读全文