阿里云产品成本核查,一般流程是登录账号,然后逐项核对填写。虽然简单,但是如果账户多,表格多,而且账户之间的数据是相关的,填起来会比较费力,几个表格,从下载数据到完成验证可能需要半个小时。因此,在保持原excel文件格式不变的基础上,自动填写相关值就变得很重要了。python操作excel的模块有很多,比如xlrd、pandas、xlwings、openpyxl。经常分不清这么多功能相似的模块有什么区别。在这里我发现xlwings可以派上用场,因为我有一个保留excel格式的需求。文件格式:表1-1注:主要修改第10、11行,其他不变。数据源通过爬虫登录阿里云,下载数据写入csv。带上日期,如data_07-25.csv表1-2虫脚本#-*-coding:utf-8-*-fromseleniumimportwebdriverfromselenium.webdriver.chrome.optionsimportoptionsimporttime,os,glob,csvfromdatetimeimportdatetimeoptions=Options()options.add_argument('--disable-infobars')options.add_argument('--incognito')#options.add_argument('--headless')bro=webdriver.Chrome(executable_path='C:\drf2\drf2\chromedriver.exe',chrome_options=options)bro.maximize_window()bro.get('https://www.aliyun.com/')bro.implicitly_wait(10)#点击首页的登录按钮bro.find_element_by_xpath('//*[@id="J_3207526240"]/div/div/div[1]/div[2]/div[2]/a[4]').click()time.sleep(1)#点击RAM用户bro.find_element_by_xpath('//*[@id="root"]/div/div[2]/div/div[2]/div[1]/div[2]/div[2]/div/div[2]/div[2]/span/div').click()u=bro.find_element_by_xpath('//*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/div[1]/div[2]/div/div/div[2]/div/div/div/form/div[1]/div[2]/div[1]/span/input')#用户名u.send_keys('')time.sleep(5)#点击下一步bro.find_element_by_xpath('//*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/div[1]/div[2]/div/div/div[2]/div/div/div/form/div[5]/button/span').click()p=bro.find_element_by_xpath('//*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/div[1]/div[2]/div/div/div[2]/div/div/div/form/div[2]/div[2]/span/input')#密码p.send_keys('')time.sleep(5)#点击登录按钮bro.find_element_by_xpath('//*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/div[1]/div[2]/div/div/div[2]/div/div/div/form/div[5]/button/span').click()time.sleep(3)#点击控制台bro.find_element_by_xpath('//*[@id="J_3207526240"]/div/div/div[1]/div[2]/div[2]/a[3]').click()time.sleep(6)#切换窗口bro.switch_to.window(bro.window_handles[-1])#点击成本bro.find_element_by_xpath('/html/body/div[1]/div/div/nav/div[1]/a').click()time.sleep(3)bro.switch_to.window(bro.window_handles[-1])available_credit=bro.find_element_by_xpath('//*[@id="app__home"]/div/div/div/div[2]/div[1]/div[1]/div[2]/div/div[1]/span[1]/span').texttime.sleep(3)#click账单明细bro.find_element_by_xpath('//*[@id="root-app"]/div[1]/div/div[6]/div[3]/a').click()time.sleep(1.5)#点击商品量价汇总bro.find_element_by_xpath('//*[@id="app__ent-expense"]/div/div/div[1]/div[1]/div/div/div/ul/li[4]/div/span').click()time.sleep(1.5)trs=bro.find_elements_by_xpath('//tbody/tr[position()>1]')forfinos.listdir('C:/Users/Administrator/Desktop/FeeInspection/'):iff.startswith('fee'):os.remove('C:/Users/Administrator/Desktop/FeeInspection/%s'%f)withopen('C:/Users/Administrator/Desktop/feeinspection/fee_%s.csv'%datetime.now().__format__('%m-%d'),'a+',newline='',encoding='gb18030')asf:f_csv=csv.writer(f)f_csv.writerow(['availablecredit',available_credit.split('')[1]])fortrintrs:tr=tr.text.split('\n')f_csv.writerow([tr[0],tr[1].split('')[1]])bro.quit()入门pandas,读取表1数据-2。为了方便识别,变量名直接用中文importpandasaspdf=pd.read_csv('data_%s.csv'%datetime.now().__format__('%m-%d'),encoding='gbk',names=['content','amount'])内容安全=eval(df.iloc[5,1])systemSMS=0云服务器ECStraffic=eval(df.iloc[4,1])objectstorage=eval(df.iloc[8,1])filestorage=eval(df.iloc[6,1])VOD=eval(df.iloc[11,1])大数据=eval(df.iloc[2,1])+eval(df.iloc[7,1])CDN=eval(df.iloc[1,1])logservice=eval(df.iloc[10,1])blockstorage=eval(df.iloc[3,1])total=round(contentsecurity+systemSMS+Cloud服务器ECS流量+对象存储+文件存储+视频点播+大数据+CDN+日志服务+块存储,2)Balance=eval(df.iloc[0,1].replace(',',''))xlwings获取工作表1-1sheetimportxlwingsasxwfromdatetimeimportdatetimeimportosapp=xw.App(visible=False,add_book=False)app.display_alerts=Falseapp.screen_updating=Falsewb=app.books.open(filename)ws=wb.sheets[0]xlwingsmodifytable1-1data#修改第10行,expand参数可以方便y按顺序写ws.range('B10').options(expand='table').value=[内容安全、系统短信、云服务器ECS流、对象存储、文件存储、视频点播、大数据、CDN,日志服务,块存储,总计,余额]#修改第11行ws.range('e41').value='本月(%s月)已使用%s元,实际账户余额为%s元'%(datetime.now().month,total,balance)path='D:/desktop/inspection/%s'%datetime.now().__format__('%m-%d')如果不是os.path.exists(path):os.mkdir(path)wb.save(os.path.join(path,'education_%s.xlsx'%datetime.now().__format__('%m-%d')))wb.close()app.quit()总结通过使用xlwings自动修改表,我的6个表从原来的操作改了半年小时到现在鼠标duang~duang~duang~点几下就可以了。消除了数百次复制粘贴点击,工作更轻松。以上就是本次分享的全部内容。觉得文章还不错的话,请关注公众号:Python编程学习圈,每日干货分享,发送“J”还能收到海量学习资料,涵盖Python电子书和教程,数据库编程、Django、爬虫、云计算等。或者去编程学习网了解更多编程技术知识。
