Python 与 Excel 表格综合实例(一):给表格增加序号,根据表格已有内容增加索引

前言:

前面我们花了6篇博客,把Python的xlwt与xlrd两个第三方模块对Excel表格的基础操作讲完了。从这篇博客开始会选择三个实例来演示,Python对Excel表格可以做一些什么事情。

当然,实际工作中会遇到更多、更复杂的一些需求,希望接下来的三个实例能起到一点抛砖引玉的作用吧。

需求一:增加序列号

之前在工作中,遇到过一个需求。有一份软件(GIS)后台输出的表格,如下图所示(已把无关数据清除、减少数据量):

需求:在FID列上对所有有效行增加序列号:KH0001,KH0002…

总体实现思路:先读取表格,按行读取,对数据进行处理。将处理后的数据写入新的表格中。

总体来说还是比较简单的,以下是实现代码:

1、读取表格、处理数据:

import xlrd

import xlwt

# 读取表格内容,按行读取

# 打开需读取的Excel文件

read_work = xlrd.open_workbook('sample.xls')

# 获取sheet对象

read_sheet = read_work.sheet_by_index(0)

# 按行读取sheet表全部数据

read_data = read_sheet._cell_values

print(read_data) # 测试读取数据

# ------运行结果------

# [['FID', 'TBYBH', 'TBBH', 'DLBM', 'QSXZ', 'QSDWDM', 'TBDLMJ', 'SHAPE_Leng', 'SHAPE_Area', 'YTMC'],

# ['', 259.0, 259.0, 1004.0, 30.0, 3.21204104014e+18, 423.17, 329.039887497, 423.170124975, '村庄道路用地'],

# ['', 395.0, 395.0, 1004.0, 30.0, 3.21204104013e+18, 275.569999999999, 144.782244633, 275.565036626999, '村庄道路用地'],

# ['', 415.0, 415.0, 1004.0, 30.0, 3.21204104007e+18, 657.97, 227.183826919, 657.971388514999, '城镇道路用地'],

# ...

# ------运行结果------

# 创建自定义FID列数据

def create_fid(data):

for i,ds in enumerate(data):

if i >= 999:

ds[0] = 'KH' + str(i+1)

elif 99 <= i < 999:

ds[0] = 'KH0' + str(i+1)

elif 9 <= i < 99:

ds[0] = 'KH00' + str(i+1)

else:

ds[0] = 'KH000' + str(i+1)

return data

new_data = create_fid(read_data[1:])

new_data.insert(0,read_data[0])

print(new_data) # 测试新建数据

# ------运行结果------

# [['FID', 'TBYBH', 'TBBH', 'DLBM', 'QSXZ', 'QSDWDM', 'TBDLMJ', 'SHAPE_Leng', 'SHAPE_Area', 'YTMC'],

# ['KH0001', 259.0, 259.0, 1004.0, 30.0, 3.21204104014e+18, 423.17, 329.039887497, 423.170124975, '村庄道路用地'],

# ['KH0002', 395.0, 395.0, 1004.0, 30.0, 3.21204104013e+18, 275.569999999999, 144.782244633, 275.565036626999, '村庄道路用地'],

# ['KH0003', 415.0, 415.0, 1004.0, 30.0, 3.21204104007e+18, 657.97, 227.183826919, 657.971388514999, '城镇道路用地'],

# ...

可以看到读取的数据 read_data 经过自写的 create_fid 函数,new_data 列表已经满足我们的需求了。

2、写入新Excel文件:

# 将新建数据写入Excel表格

# 创建新的Excel表

new_work = xlwt.Workbook()

# 创建新的sheet表

new_sheet = new_work.add_sheet('Sheet1')

# 按行写入数据,按行写入

for row,ds in enumerate(new_data):

for col,d in enumerate(ds):

new_sheet.write(row,col,d)

# 保存文件

new_work.save('new_sample.xls')

这里我们先新建了一个Excel文件,然后将数据按行写入,最后保存为 new_sample.xls 文件。文件截图如下:

可以看到新保存的Excel文件已经在 FID 列上按照需求增加了序号列。

用自写的方法来实现写入功能:

我们用自写的类来实现创建表格,写入数据功能:

# 用自写的类来创建新的Excel表格

from my_xlwt import My_xlwt

my_work = My_xlwt()

# 创建格式:

head_style = my_work.diy_style('Times New Roman',15) # 首行格式

body_style = my_work.diy_style('Times New Roman',10,False,3) # 正文格式

# 写入首行数据

my_work.write_row(0,0,new_data[0],head_style)

# 按行写入多组数据

my_work.write_rows(1,0,new_data[1:],body_style)

# 自动调整列宽

my_work.adjust_col_width(6) # 自动调整列宽方法没写好,后期在博客里再更新吧...

# 保存数据

my_work.save('my_new_sample.xls')

解析:用自写类按行写入数据、设置单元格格式、设置自适应列宽(此方法还有点问题…)。

my_new_sample.xls 文件截图:

需求二:按已有内容新增列

需求描述:

根据 YTMC 列的值,新建一个 YTDM 用于显示用地编号的列,用地编号信息在s2_info.xls表格文件中。

主要思路:分别读取两个表格文件,构造数据,处理数据。将处理好的数据写入新的Excel表格文件里。代码:

读取文件数据:

import xlrd

import xlwt

# 读取两个Excel表格信息

# 打开需读取的Excel文件

read_work = xlrd.open_workbook('sample2.xls')

replace_work = xlrd.open_workbook('s2_info.xls')

# 获取sheet对象

read_sheet = read_work.sheet_by_index(0)

replace_sheet = replace_work.sheet_by_index(0)

# 按行读取 read_sheet 表全部数据

read_data = read_sheet._cell_values

# 按列读取 replace_sheet 数据

r_d = replace_sheet._cell_values

# 并储存为字典数据

replace_data = {key:values for key,values in r_d}

处理数据:

# 构造数据

for ds in read_data[1:]:

if ds[-1] in replace_data.keys():

ds.append(replace_data[ds[-1]])

else:

ds.append('error')

read_data[0].append('YTDM')

print(read_data) # 测试数据

# ------运行结果------

# [['FID', 'TBYBH', 'TBBH', 'DLBM', 'QSXZ', 'QSDWDM', 'TBDLMJ', 'SHAPE_Leng', 'SHAPE_Area', 'YTMC', 'YTDM'],

# ['KH0001', 259.0, 259.0, 1004.0, 30.0, 3.21204104014e+18, 423.17, 329.039887497, 423.170124975, '村庄道路用地', 1002.0],

# ['KH0002', 395.0, 395.0, 1004.0, 30.0, 3.21204104013e+18, 275.569999999999, 144.782244633, 275.565036626999, '村庄道路用地', 1002.0],

# ['KH0003', 415.0, 415.0, 1004.0, 30.0, 3.21204104007e+18, 657.97, 227.183826919, 657.971388514999, '城镇道路用地', 1001.0],

# ...

# ------运行结果------

创建新得Excel文件,写入数据:

# 新建工作薄,将处理好的数据写入

# 创建新的Excel表

new_work = xlwt.Workbook()

# 创建新的sheet表

new_sheet = new_work.add_sheet('Sheet1')

# 按行写入数据,按行写入

for row,ds in enumerate(read_data):

for col,d in enumerate(ds):

new_sheet.write(row,col,d)

# 保存文件

new_work.save('replace_sample.xls')

replace_sample.xls 文件截图:

结尾:

以上就是本篇博客所有内容,比较简单,主要是对前面介绍过的Excel文件读取和写入的知识在实例中运用一下,然后就是一些简单的业务逻辑。感谢阅读。

着重介绍 Python xlwt、xlrd 等模块操作 Excel 表格文件的方法,也会搭配一些实例演练,强化所讲知识点的理解与运用。

感兴趣的朋友,可以点个关注或收藏。

创作不易,你的支持是我最大的动力,感谢 !

写入文件python并用序号_Python和excel表合成示例:向表中添加序列号,向表的现有内容添加索引,与,Excel,表格,综合,实例,给,增加,序号,对,已有...相关推荐

  1. Python 与 Excel 表格综合实例:给表格增加序号,对表格已有内容增加索引

    Python 与 Excel 表格综合实例(一):给表格增加序号,根据表格已有内容增加索引 前言: 需求一:增加序列号 需求二:按已有内容新增列 结尾: [Python与Office]专栏 前言: 前 ...

  2. python多线程写同一个文件_Python多线程快速写入文件,python,飞速

    Python多线程快速写入文件,python,飞速 发表时间:2020-07-10 乱序多线程写入 举个最简单的例子,只要求快速写入即可,对顺序无要求时: import threading def w ...

  3. python gui插件_Python进阶量化交易专栏场外篇17- GUI控件在回测工具上的添加

    欢迎大家订阅<教你用 Python 进阶量化交易>专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前推出的扩展篇链接如下: 为了 ...

  4. python定义单位矩阵_python 实现一个反向单位矩阵示例

    python 实现一个反向单位矩阵示例 反向单位矩阵 单位矩阵即对角线为 1,如下: ​ 那么反向的单位矩阵就是反对角线为 1: ​ 左右镜像操作 这里采用 numpy 实现. 方案 1 import ...

  5. ssis导出数据性能_如何使用SSIS将数据从Excel导出到Azure SQL数据库中的多个表

    ssis导出数据性能 In this article, I am going to explain how we can split the data within the excel file an ...

  6. python中文字符串写入文件,python写入中英文字符串到文件的方法

    python写入中英文字符串到文件的方法 本文实例讲述了python写入中英文字符串到文件的方法.分享给大家供大家参考.具体分析如下: python中如果使用系统默认的open方法打开的文件只能写入a ...

  7. python写入文件-Python写入文件(write和writelines)详解

    如果以 r+.w.w+.a.a+ 模式打开文件,则都可以写入.需要指出的是,当以 r+.w.w+ 模式打开文件时,文件指针位于文件开头处:当以 a.a+ 模式打开文件时,文件指针位于文件结尾处. 另外 ...

  8. python创建矩阵_Python创建对称矩阵的方法示例【基于numpy模块】

    本文实例讲述了Python创建对称矩阵的方法.分享给大家供大家参考,具体如下: 对称(实对称)矩阵也即: step 1:创建一个方阵 >>> import numpy as np & ...

  9. python unittest断言_python unittest之断言及示例

    assert.png 前言 python unintest单元测试框架提供了一整套内置的断言方法. 如果断言失败,则抛出一个AssertionError,并标识该测试为失败状态 如果异常,则当做错误来 ...

最新文章

  1. python 按键获取_Python中按键来获取指定的值
  2. JNDI数据库连接池的配置
  3. java Ext安装_eclipse中ext插件安装方法
  4. 腾讯视频下载安装免费装到手机_腾讯视频怎么上传个人本地视频
  5. 接口测试工具-Jmeter使用笔记(八:模拟OAuth2.0协议简化模式的请求)
  6. 音视频开发(15)---IPC+NVR+路由器+ffmpeg+nginx实现网页/Android/IOS的HLS直播
  7. Vue成大学核心课程
  8. java 小数精度问题
  9. intellij idea 破解 2017
  10. 用友U9【SV】服务
  11. 通过python使用多种方法改变图片尺寸
  12. BDC的执行模式与更新模式
  13. html鼠标事件没反应,电脑鼠标点击当前页面没反应怎么办
  14. 为什么要配置JAVA_HOME,有什么用?谁在用JAVA_HOME
  15. 十二个“一”的文艺创作拓展:关于星座
  16. Minecraft 1.12.2 彩色渐变字体 模组发布
  17. 求数组中最长递增子序列
  18. windows编程之鼠标消息总结
  19. cesium获取模型高度_【小技巧】快速生成城市建筑Sketchup模型
  20. WM6 绿色版模拟器的使用

热门文章

  1. 华为服务器怎么查看系统日志,查询系统操作日志(operationlog)
  2. java puzzlers英文版_java puzzlers [更新至14.04.03]
  3. java 获取服务器IP地址及MAC地址
  4. Layui--代码修饰器layui.code
  5. python程序出现了异常会执行哪个语句,python中的异常是什么?应该怎么处理异常?...
  6. KendoUI--Grid api 出现的问题
  7. Mysql union和union all用法
  8. java中怎样任意跳转到指定行而不受循环语句限制
  9. Android开发笔记(三十)SQLite数据库基础操作
  10. 20155301 Exp4 恶意代码分析