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

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

前言:

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

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

需求一:增加序列号

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3V6OTI=,size_16,color_FFFFFF,t_70#pic_center

需求:在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 文件。文件截图如下:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3V6OTI=,size_16,color_FFFFFF,t_70#pic_center

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

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3V6OTI=,size_16,color_FFFFFF,t_70#pic_center

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

# 用自写的类来创建新的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 文件截图:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3V6OTI=,size_16,color_FFFFFF,t_70#pic_center

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

需求描述:

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3V6OTI=,size_16,color_FFFFFF,t_70#pic_center

主要思路:分别读取两个表格文件,构造数据,处理数据。将处理好的数据写入新的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 文件截图:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3V6OTI=,size_16,color_FFFFFF,t_70#pic_center

结尾:

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值