首页 文章 精选 留言 我的

精选列表

搜索[自动装配],共10000篇文章
优秀的个人博客,低调大师

Python办公自动化之从Word到Excel

云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 大家好,今天有一个公务员的小伙伴委托我给他帮个忙,大概是有这样一份Word(由于涉及文件私密所以文中的具体内容已做修改) 一共有近2600条类似格式的表格细栏,每个栏目包括的信息有: 日期发文单位文号标题签收栏需要提取其中加粗的这三项内容到Excel表格中存储,表格样式如下: 也就是需要将收文时间、文件标题、文号填到指定位置,同时需要将时间修改为标准格式,如果是完全手动复制和修改时间,依照一个条目10s的时间计算,一分钟可以完成6条,那么最快也需要: 而这类格式规整的文件整理非常适合用Python来执行,好的那么接下来请Python出场,必要的信息我在代码中以注释信息呈现。 首先使用Python将Word文件导入 # 导入需要的库docx from docx import Document # 指定文件存放的路径 path = r'C:\Users\word.docx' # 读取文件 document = Document(path) # 读取word中的所有表格 tables = document.tables 再把问题逐个划分,首先尝试获取第一张表第一个文件条目的三个所需信息 # 获取第一张表 table0 = tables[0] 仔细观察可以发现一个文件条目占据了3行,所以对表格全部行循环迭代时可以设步长为3 注意观察表格,按照row和cell把所需内容解析清楚 # 在全局放一个变量用来计数填序号 n = 0 for i in range(0, len(table0.rows) + 1, 3): # 日期 date = table0.cell(i, 1).text # 标题 title = table0.cell(i + 1, 1).text.strip() # 文号 dfn = tables[j].cell(i, 3).text.strip() print(n, date, tite, dfn) 接下来需要解决的是,时间我们获取的是 2/1 这种 日/月的形式。我们需要转化成 YYYY-MM-DD格式,而这利用到datetime包的strptime和strftime函数: strptime: 解析字符串中蕴含的时间strftime: 转化成所需的时间格式 import datetime n = 0 for i in range(0, len(table0.rows) + 1, 3): # 日期 date = table0.cell(i, 1).text # 有的条目时间是空的,这里不做过多判别 if '/' in date: date = datetime.datetime.strptime(date, '%d/%m').strftime('2020-%m-%d') else: date = '-' # 标题 title = table0.cell(i + 1, 1).text.strip() # 文号 dfn = tables[j].cell(i, 3).text.strip() print(n, date, tite, dfn) 这样一张表的内容解析就完成了,注意这里用的是table[0]即第一张表,遍历所有的表加一个嵌套循环就可以,另外也可以捕获异常增加程序灵活性 n = 0 for j in range(len(tables)): for i in range(0, len(tables[j].rows)+1, 3): try: # 日期 date = tables[j].cell(i, 1).text if '/' in date: date = datetime.datetime.strptime(date, '%d/%m').strftime('2020-%m-%d') else: date = '-' # 标题 title = tables[j].cell(i + 1, 1).text.strip() # 文号 dfn = tables[j].cell(i, 3).text.strip() n += 1 print(n, date, title, dfn) except Exception as error: # 捕获异常,也可以用log写到日志里方便查看和管理 print(error) continue 信息解析和获取完成就可以导出了,用到的包是openpyxl from openpyxl import Workbook # 实例化 wb = Workbook() # 获取当前sheet sheet = wb.active # 设立表头 header = ['序号', '收文时间', '办文编号', '文件标题', '文号', '备注'] sheet.append(header) 在最内层解析循环的末尾加上如下代码即可 row = [n, date, ' ', title, dfn, ' '] sheet.append(row) 线程的最后记得保存 wb.save(r'C:\Users\20200420.xlsx') 运行时间在10分钟左右,大概离开了一会程序就执行结束了 最后附上完整代码,代码很简单,理清思路最重要 from docx import Document import datetime from openpyxl import Workbook wb = Workbook() sheet = wb.active header = ['序号', '收文时间', '办文编号', '文件标题', '文号', '备注'] sheet.append(header) path = r'C:\Users\word.docx' document = Document(path) tables = document.tables n = 0 for j in range(len(tables)): for i in range(0, len(tables[j].rows)+1, 3): try: # 日期 date = tables[j].cell(i, 1).text if '/' in date: date = datetime.datetime.strptime(date, '%d/%m').strftime('2020-%m-%d') else: date = '-' # 标题 title = tables[j].cell(i + 1, 1).text.strip() # 文号 dfn = tables[j].cell(i, 3).text.strip() n += 1 print(n, date, title, dfn) row = [n, date, ' ', title, dfn, ' '] sheet.append(row) except Exception as error: # 捕获异常,也可以用log写到日志里方便查看和管理 print(error) continue wb.save(r'C:\Users\20200420.xlsx') 【云栖号在线课堂】每天都有产品技术专家分享!课程地址:https://yqh.aliyun.com/live 立即加入社群,与专家面对面,及时了解课程最新动态!【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK 原文发布时间:2020-04-21本文作者:陈熹本文来自:“51CTO”,了解相关信息可以关注“51CTO”

优秀的个人博客,低调大师

微服务治理实践:如何对单点异常进行自动摘除

微服务架构下,稳定性和高可用性一个永恒的话题,在实际的治理过程中,我们有可能会遇到以下场景: 某个应用灰度发布,先上了几台机器,由于代码逻辑写的有问题,造成线程池满,出现运行异常。 服务端集群中,某几台机器由于磁盘满,或者是宿主机资源争抢导致 load 过高,客户端出现调用超时。 服务端集群中,某几台机器由于线程池满,造成 Full Garbage Collection。 在以上 3 种场景中,由于客户端并不法感知已经出现问题的那些服务端,依然会发送请求到这些机器上,造成业务调用报错,上游的机子将会被下游的某台机子的短暂故障拖垮,造成应用雪崩的风险。 面对这种场景,如果仅仅为此而进行服务降级,对应用的伤害未免过大,但如果我们可以检测出服务集群中某些故障机子,并对其进行短暂隔离,即可有效保障服务的高可用与系统的稳定性,同时给运维人员提供了宝贵的缓冲时间,用于问题定位,排除故障。 本文将作为《微服务治理实践》系列篇的第一篇,为大家介绍如何实现离群实例摘除。该系列文章是基于阿里云商业化产品 EDAS 的微服务实践,如果您团队具备较强的微服务治理能力,那么希望我们在微服务治理方面的实践和背后的思考,可以为您提供一些参考。 企业级分布式服务 EDAS 重磅升级,12月17日下午15:00--16:00中间件小师妹在直播间等你,携开发工程师十眠为您详细介绍 EDAS 离群实例摘除等微服务治理能力。还有礼品送不停,直播间地址点击“传送门”。 Microservice Outlier Ejection (微服务离群实例摘除) 什么是离群实例摘除 当单点发生夯机异常时,consumer 能主动判断,并将对应的 provider 实例短时间剔除,不再请求,在一定时间间隔后再继续访问。同时,具有全局异常判断能力,当 provider 异常实例的数量过多时,并且超过一定的控制比例,说明此时 provide 整体服务质量低下,该机制仅保持摘除一定的比例。 离群实例摘除的功能 从服务层容错能力上,对业务稳定性进行增强,有效解决单点故障的问题。 与熔断的区别 熔断是指当服务的输入负载激增时, 避免服务被迅速压垮导致雪崩效应,而对负载进行断路的一种方式 。 熔断一般由熔断请求判断算法,熔断恢复机制,熔断报警等模块组成。隔离是指,为了避免在依赖的服务故障时候造成的故障扩散,而采取的将系统进行单元化设计的一种架构方法。 若仅仅由于服务端集群中单点异常问题,就采用熔断降级方案,将会对应用的伤害过大,离群实例摘除可以有效地解决单点异常问题从而保证服务质量。若provider 整体服务质量低下时,离群摘除效果不再明显,此时可以采用熔断降级功能。 离群实例摘除支持的版本 只要您的应用版本在列表中,您无需改动一行代码就可以使用到离群实例摘除功能。 目前支持版本 开发中版本(即将支持) Dubbo 2.5.0~2.7.3 < 2.5.0 dubbox 版本 Spring Cloud D、E、F、G、H C 目前已经覆盖了市面上大部分微服务场景,后续我们将会持续支持开源最新的 Dubbo/Spring Cloud 版本。 我们提供了 Dubbo 和 Spring Cloud 两种场景的离群摘除功能,本文将先介绍一下 Dubbo Microservice Outlier Ejection 的实践与效果。 示例 下面将通过在 EDAS 上通过演示 Dubbo 离群摘除功能及效果。 企业级分布式应用服务EDAS(Enterprise Distributed Application Service)是一个应用托管和微服务管理的 PaaS 平台,提供应用开发、部署、监控、运维等全栈式解决方案,同时支持 Dubbo、Spring Cloud 等微服务运行环境。 https://www.aliyun.com/product/edas 准备 接下来以微服务Demo为例子示范离群摘除功能,读者可以从github中下载验证 微服务Demo是一个简单的电商项目,下图为项目结构,cartservice 为 Dubbo 框架的购物车服务 provider,productservice 为Spring Cloud提供的商品详情服务 provider,frontend 为web controller即前端展示页面,可以理解为consumer。 我们将以cartservice服务即Dubbo服务端为例子,展示离群实例摘除功能。 EDAS 上部署微服务 Demo 首先 cd cartservice切换到 cartservice 目录下,再通过 mvn clean install 打包,通过 cd cartservice-provider/target 切换到target目录下,我们可以看到新生成的 cartservice-provider-1.0.0-SNAPSHOT.jar 包,然后在 EDAS上 创建一个 cartservice 应用。 点击下一步后,上传刚才打包的jar包,即 cartservice-provider/target/ cartservice-provider-1.0.0-SNAPSHOT.jar然后下一步,记住登陆密码,直到创建应用成功。 然后启动应用,到目前为止,我们启动了一个 cartservice-provider。点击按此实例规格扩容,该服务我们部署在两个实例上。 我们在这个 provider 的 com.alibabacloud.hipstershop.provider.CartServiceImpl 类中可以看到,这个 provider 是提供了viewCart 和 addItemToCart 的两个关于购物车的服务,我们在 viewCart 中加入一些模拟运行时异常的逻辑。 @Value("${exception.ip}") private String exceptionIp; @Override public List<CartItem> viewCart(String userID) { if (exceptionIp != null && exceptionIp.equals(getLocalIp())) { throw new RuntimeException("运行时异常"); } return cartStore.getOrDefault(userID, Collections.emptyList()); } 其中 exceptionIp 为 ACM 配置中心的exception.ip的配置项,若该项配置为本机ip时,该服务throw RuntimeException,用于模拟业务异常的场景。 为什么将 cartservice 扩容到两个实例,想必大家也猜到了,运行时通过配置ACM配置中心指定其中一个实例的IP,模拟出一个实例异常的场景。 接下来,我们需要部署 frontend /productservice 两个服务,方式一样,分别上传 frontend/target/frontend-1.0.0-SNAPSHOT.jar 和 productservice/productservice-provider/target/productservice-provider-1.0.0-SNAPSHOT.jar 从下图可以看到,我们的微服务Demo在EDAS部署上去了。 模拟业务异常 进入到frontend 应用中,我们看到其实例的公网 ip 为 47.99.150.33。 进入浏览器访问http://47.99.150.33:8080/ 点击View Cart 访问至 http://47.99.150.33:8080/cart 可以看到,此时服务都是正常的。 我们去 ACM 配置中心 配置 exception.ip 为 172.16.205.180(即cartservice的其中某个实例的IP)。 然后继续访问 http://47.99.150.33:8080/cart,发现 50 % 的概率错误页面 此时,我们写一个脚本,定时大量访问 http://47.99.150.33:8080/cart 模拟请求。 while : do result=`curl $1 -s` if [[ "$result" == *"500"* ]]; then echo `date +%F-%T` $result else echo `date +%F-%T` "success" fi sleep 0.1 done 然后 sh curlservice.sh http://47.99.150.33:8080/cart 我们看到不断重复的每秒钟 10 次的 50% 的调用成功率。 其实也可以理解到,下游的服务质量随着上游的某台机子的异常而急剧下降,甚至可能导致下游服务被上游某些机子的(系统、业务)异常给拖垮。 开启离群摘除策略 下面我将演示离群摘除的策略的开启及其效果的展示。 创建 我们进入到 EDAS 左侧列表的 [微服务管理] 下的 [离群实例摘除] 界面中,并选择创建离群实例摘除策略。 然后按照提示一步步创建离群摘除的策略。 基本信息 如上图可以选择命名空间、填写策略名称、选择该策略支持的框架类型(Dubbo/Spring Cloud)。 选择生效应用 按照目前的调用方式,我们只需要配置 frontend 应用,保护下游应用 consumer。 配置策略 这些参数都提供了默认值,需要根据自己应用的具体情况调整最合适的值,由于需要保护的 RuntimeException 属于业务异常于是选上 网络异常+业务异常。(需要注意的是即使摘除实例比例上限配得特别低,向下取整数小于1,当集群中实例数目大于1,且某一实例异常,我们也会摘除一实例)。 创建完成 可以看到策略的信息,创建完成。 策略 看到了我们创建的离群摘除策略,且是针对Dubbo框架,并且针对的是 网络异常+业务异常 的异常类型。 验证离群摘除效果 这时,我们看到,再感知到异常后,离群摘除功能生效,请求调用一阵子后,均返回正确结果。 不断刷新浏览器访问 http://47.99.150.33:8080/cart 也均正常 客户端感知到某台服务端机子异常后,主动摘除。仅仅调用业务正常的 Provider 实例,同时我们也可以通 ARMS(EDAS监控系统) 监控看到服务质量的上升,以及流量从异常 Provider 中摘除。 Dubbo框架可以从 /home/admin/.opt/ArmsAgent/logs 目录下的日志中,搜索日志中的 “OutlierRouter” 关键字可以看到一系列离群实例摘除的事件日志。 修改/关闭离群摘除策略 对于EDAS的应用我们支持通过控制台动态修改和删除离群摘除策略。 对应策略规则的修改 点击 修改生效应用 或者 编辑策略。 然后增加删除应用或者调整参数,确定后均立即生效 删除对应策略 控制台的操作,对应用中的配置都是实时生效的,若删除策略后,默认关闭相关策略。 若我们打开ARMS监控观察具体的调用情况。 ARMS监控 若我们开启监控,将会直观看到流量与请求错误等信息。 开启离群摘除前 如下图方式开启,然后跳转至ARMS(EDAS监控系统)应用监控页面,我们需要把三个应用都开启高级监控。 我们可以从下图即ARMS(EDAS监控系统)应用监控页面直观地看到结果。 从以下拓扑图中我们看到,流量不断地访问到cartservice服务上。 开启离群摘除后 离群摘除效果通过简单的例子就看到了,当然可以通过 ARMS (EDAS监控系统)的监控可以明显观察到服务质量的提升。 可以看到,在开启了离群摘除的那个点只后,错误率从50%明显下降。 其中两个小的起伏毛刺是因为,离群摘除一段时间后会重新尝试访问被摘除的 endPoint ,若依旧错误率高于阈值,继续隔离,且间隔时间更长。 离群实例摘除具体控制逻辑 前面我们看到了,离群实力摘除对应用稳定性提高带来的帮助,下面我们将具体分析离群实例摘除的控制逻辑,有助于您更好地理解其各种参数的意义,以及可以根据自己的应用情况,通过调整参数,配置出最合适自己的离群摘除策略。 对于 Dubbo/SpringCloud 框架: 默认QPS下限为1 只有当前某实例的调用QPS大于1才会开始离群实例摘除保护。 默认错误率下限 50% 只有当前某实例的调用错误率高于 50% ,则系统会认为该服务端集群的当前某实例处于异常状态。 默认摘除实例比例上限 20% 若当前服务集群中,有大于20%的实例节点处于异常状态,则系统只会摘除异常状态的实例数占集群总数的50%。 异常类型 若异常类型为 网络异常 ,则系统仅仅把网络异常的错误算进错误率统计中,忽略掉业务异常;反之,若选择了 网络异常 + 业务异常 则系统会将所有异常当成错误算进错误率统计中。 关于恢复检测单位时间(默认30000ms即30s)与未恢复累计次数上限(默认40)的解释 其中第一次摘除时长为 0.5 分钟,时间到了之后 consumer 会继续访问该 provider ,若该 provider 服务质量依旧低下,则会继续摘除,摘除时长随着连续被摘除次数的增加线性递增每次增加 0.5 分钟,每次最多摘除 20 分钟。当然,若继续调用之后,服务质量恢复了,则会当成健康服务,下一次又出现异常导致服务质量低下问题时,会重新隔离 0.5 分钟,并继续上述规则。 兜底 但是当客户端调用的服务仅有1个实例提供服务提供则不会隔离这个实例。 若当前客户端调用的服务实例大于1个,且当前离群摘除隔离比例计算出的实例数小于1,若服务端集群出现单点故障,则会摘除1个实例。 上面所有的实例可以理解为endpoint(ip+port为纬度) 通用最佳实践 可以配置相对的错误率阈值(50%)与过低的摘除实例比例上限(10%),全链路开启。 离群实例摘除技术细节 无侵入技术 无侵入方案即通过agent技术来实现,一句话来说就是通过字节码增强技术,运行时插入我们的代码,改变应用的原有逻辑,可以理解为运行时AOP,通过在Dubbo的链路中插入Filter/Router,在Spring Cloud中增强LoadBalance逻辑,来实现我们期望的路由控制逻辑。同时因为是agent增强的,再加上 Dubbo 各个版本的链路整体基本没大的变化,Spring Cloud 模型的统一性,因此我们可以花少的代价将能力基本覆盖到所有版本。 Dubbo Agent 方案技术架构 对于用户来说,无需改动一行代码,一行配置,即可享受到稳定性增强的能力。 离群实例摘除技术 Outlier Detection 离群检测 均是基于时间窗口的数据统计。 两种实现1、Dubbo 2.7 版本通过向链路中嵌入一个MetricsFilter,对于链路的每个request/response做打点处理,统计rt、调用成功与否、异常类型,并且已endpoint(ip+port)为key存储 2、在 Agent 底座中统计经过的http请求,通过url、rt、状态码、异常类型等数据结果,统计最近时间窗口的数据(目前写死 10 秒,暂时不透出) 实时统计前N秒的调用信息,作为离群实例摘除动作的依据。 Outlier Ejection 离群摘除 Dubbo 基于 Dubbo Router 实现,对于调用的上游服务对应的所有 invokers 中,拉黑掉“不健康”的节点,同时记录拉黑的信息。 Dubbo-Router控制逻辑每次请求过来仅仅check一下并标记状态,后台有专门两个线程将标记的流量进行判断是否进入隔离列表或从中剔除,修改拉黑信息等耗时操作,最大程度上保证请求的实时性。 Spring Cloud 基于 扩展 LoadBalace 实现,原理相似。 微服务商业化团队招人了~ Dubbo / Spring Cloud 商业化,我们除了 EDAS,我们还有 ARMS(应用实时监控服务)、MSE(微服务引擎)、ACM(应用配置管理)、SAE(Serverless 应用引擎)等独立产品。我们在忙什么?用心打磨这些产品,就是我们的工作。 团队的目标是将阿里巴巴在服务治理上的最佳实践通过产品化的形式输出给阿里云上的企业客户,帮助客户实现业务永远在线。 招聘邮箱: shengwei.psw@alibaba-inc.com 作者信息:泮圣伟,花名十眠,中间件技术-微服务产品团队研发工程师,负责 Dubbo / Spring Cloud 商业化产品开发相关工作,目前主要关注云原生、微服务等技术方向。

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册