本文完成任务如下:
从下面excel表格的第一列产品中提取 第二列带宽字段,用Python提取:
相关程序 及解释如下:
第一种方法:
import xlrd
import xlwt
import re
a =u'C:\\Users\\gh\\Desktop\\套餐.xls'
#有中文的时候路径需要加上转义字符,并且在路径前加u表示后面的字符串以unicode格式存储
data = xlrd.open_workbook(a)#打开Excel文件
table = data.sheet_by_name('sheet')#获取工作表
#获取工作表还有另外两种方式
#table = data.sheets()[0]#按照索引顺序 获取
#table = data.sheet_by_index(0)#按照索引顺序获取
#新建工作表
workbook = xlwt.Workbook()#新建工作表
worksheet = workbook.add_sheet('sheet1')#新建sheet
#套餐提取
n = table.nrows#计算读取工作表的行数,方便后面循环
for iin range(1,n):
result = table.cell(i,0).value#读取i行0列的单元格数据
result1 = re.findall('(\d+)M', result)#提取M前面的数据
#切记,数据分析的时候不能只看正常的数据 还要考虑不正常的或者为空的数据
#因为为空的时候列表为空,后面提取会报列表超出循环的错误
nr =len(result1)
if nr ==0:
result2 =''
else:
result2 = result1[(nr)-1]
worksheet.write(i,1,result2)#使用过的单元格不能重复使用 不会覆盖
#如果中间有单元格里面存在数值报错
#Attempt to overwrite cell: sheetname='sheet2' rowx=1 colx=8
b =u'C:\\Users\\gh\\Desktop\\提质降本报告相关\\taocan.xls'#提取的套餐想保存的路径
workbook.save(b)#保存数据
#数据提取验证
import pandasas pd
datat = pd.read_excel(b)#当然这个地方也可以直接保存到当前的文件下面
第二种方法:
import xlrd
import xlwt
import re
import xlutils.copy
import os
a =u'C:\\Users\\gh\\Desktop\\提质降本报告相关\\套餐.xls'
#有中文的时候加上转义字符
data = xlrd.open_workbook(a)#打开Excel文件
table = data.sheet_by_name('sheet')
wb = xlutils.copy.copy(data)
sheet = wb.get_sheet(0)
n = table.nrows
for iin range(1,n):
result = table.cell(i,0).value
result1 = re.findall('(\d+)M', result)
#切记,数据分析的时候不能只看正常的数据 还要考虑不正常的或者为空的数据
nr =len(result1)
if nr ==0:
result2 =''
else:
result2 = result1[(nr)-1]
sheet.write(i, 8, result2)# 写入单元格,copy中自带的保存函数
os.remove(a)
wb.save(a)
#数据提取验证
import pandasas pd
datat = pd.read_excel(a)
注意:
Python需要注意的是写入excel的时候必须是xls03版形式的,如果使用xlsx16版形式的,写入的excel打不开,但是使用Python可以读取,至于为什么这么神奇,欢迎大神文末留言。
另外 其他Excel操作技巧参见