环境准备
- 安装Python3,安装教程此处略。
- 安装xlrd和xlwt库:
(1) 同时按下Windows图标键+“R”(打开运行窗口);
(2) 输入“cmd”;
(3) 输入“pip install xlrd”,“pip install xlwt”
实现功能
实现功能如图所示:
- 以“/”为分隔符,拆分第一列中各单元格的数据,加到新建行的第一列;
- 拷贝其他列的数据到新建行。
代码
- 新建txt文件,复制以下代码并保存(注意空格对齐问题,Python对空格缩进敏感);
- 修改文件后缀名为test.py(文件名可按需修改);
- 将待处理的excel表放在test.py文件同级目录下;
- 在py文件目录下,按住“Shift”键的同时,单击鼠标右键,选择“在此处打开命令行窗口”;
- 输入“python .\test.py”,按“Enter”键即可运行。
import xlrd
import xlwt
data_r=xlrd.open_workbook('数据拆分.xlsx')
table_r = data_r.sheets()[0] #表示excel的第0个sheet(从左往右数),原始数据
data_w=xlwt.Workbook(encoding = 'utf-8')
table_w=data_w.add_sheet('target') #目标数据
nrows=table_r.nrows #获得表的行数
ncols=table_r.ncols #获得表的列数
print(nrows) #打印信息,可省略
print(ncols) #打印信息,可省略
row_w = 0
for i in range(nrows): #遍历原始数据的每行
row_info=table_r.row_values(i) #读取一行的数据
pre_data = row_info[0] #读取第0列的数据
add_row = len(pre_data.split('/')) #获得拆分后的字符串数组的元素个数
print('add_row',add_row) #打印信息,可省略
for k in range(add_row):
table_w.write(row_w+k,0,pre_data.split('/')[k])
print(row_w+k,k) #打印信息,可省略
for j in range(1,ncols):
table_w.write(row_w+k,j,row_info[j])
row_w+=add_row
print(pre_data.split('/')) #根据“/”划分单元格中的数据;打印信息,可省略
data_w.save('result.xls') #不能保存为xlsx,打开会报错
问题小结
- 通过xlwt只能在单元格写入一次数据,重复写入会报错“overwrite”。
- range()的用法:range(start, stop, step), 从start增加至stop(不含stop),步长为step。默认的start值为0,默认的step值为1。例如:range(5) 等同于C语言中的for(int i=0; i<5; i++)。
- split()的用法:括号内为指定的分隔符,也可指定分隔个数(此处略),得到的结果是字符串数组。若输入的字符串中不存在分隔符,得到的结果是原字符串。