python使用xlrd和xlwt模块对Excel文件读写(实例:将点坐标转为无向图距离)

参考文章《python使用xlrd和xlwt模块对Excel文件读写详解》


一、数据与目标

数据是这样的,A列是城市序号1-20,B列是城市的x坐标,C列是城市的y坐标。
在这里插入图片描述
我要做的是通过每个城市间的坐标计算每2个城市间的距离,做出如下的无向图表(数据对称,对角线为方便数据处理,赋值为接近于0的无穷小1e-4)
在这里插入图片描述


二、代码

1、先读取excel文件并处理
import xlrd

# 打开一个excel文件作为工作簿
workbook = xlrd.open_workbook("cityData.xlsx")
# 输出全部sheet的名字(sheet名字显示在左下角)
print(workbook.sheet_names())
# 按照名字找到你想要的sheet作为数据表
Data_sheet = workbook.sheet_by_name("Sheet1")

rowNum = Data_sheet.nrows  # sheet行数
colNum = Data_sheet.ncols  # sheet列数

print('sheet行数:', rowNum)
print('sheet列数:', colNum)

# 接下来进入正题,先定义一个numpy矩阵,长宽都和城市个数rowNum一样
import numpy as np
D = np.zeros((rowNum, rowNum))

# 两两配对,从Data_sheet算出城市间距,赋值到矩阵D中
import math
for i in range(rowNum):
    for j in range(rowNum):
        if j != i:  # 欧式距离,对称
            DeltaX = Data_sheet.cell(i, 1).value - Data_sheet.cell(j, 1).value
            DeltaY = Data_sheet.cell(i, 2).value - Data_sheet.cell(j, 2).value
            D[i, j] = math.sqrt(DeltaX ** 2 + DeltaY ** 2)
            
            # 下面这个注释的方法也可以完成同样的功能
            # D[i, j] = math.sqrt(Data_sheet.cell_value(i, 0)**2 + Data_sheet.cell_value(j, 0)) ** 2)
            
        else:  # 对角线值设为无穷小, 但!=0
            D[i, j] = 1e-4

print(D)
2、再输出到指定excel文件
import xlwt
# 输出
toPath = "distance.xls"
toWorkbook = xlwt.Workbook(encoding='utf-8')
toData_sheet = toWorkbook.add_sheet("Sheet1")
for i in range(rowNum):
    for j in range(rowNum):
        toData_sheet.write(i, j, D[i, j])	# .write(要写的行,要写的列,要写的值)

# 保存
toWorkbook.save(toPath)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值