美文网首页后台技术
临时需求也要写脚本工具

临时需求也要写脚本工具

作者: tiankongus | 来源:发表于2019-08-22 20:04 被阅读0次

    通过分析问题,一步步拆解问题,原先不是很确定的人工处理的方案,通过写工具就变成一个非常可靠的解决方案了。

    一、背景

    前几天,同事突然接到一个紧急需求:将所有的 XXX 文字替换为 YYY 文字。
    如果仅仅看着需求,很简单,找到所有的 XXX 替换即可。

    但是这个问题在于,这些 XXX 文字都在图片上。
    幸运的是,所有图片地址都已经在数据库里面了。
    不幸的是,这些图片地址里面有一些无关的文字,需要提取出图片地址。

    面对这样的临时需求,该如何找到一个方案来解决呢?

    二、手动处理

    分析一:虽然文字在图片上,但是有这个文字的图片应该很少。
    方案一:先手动把最容易找到的图片替换了。

    同事采用了最原始的方案一。

    我看到这个方案,问了几个问题。

    问题1:图片在数据库替换修复后,外网全部生效需要多生时间?
    回答1:新系统需要清洗全量数据(目前有几亿数据)。

    问题2:如果花费若干小时清洗完数据了,发现漏了怎么办?
    回答2:。。。

    问题3:如果人工排查数据库的图片地址,怎么样?
    回答3:数据库里图片地址太多,人工不太可行。

    对于默认方案,几乎所有人都可以想到。
    但是大部分人没去思考默认方案是否可以 100% 的解决问题。
    如果没有 100% 解决,代价又是什么。

    三、脚本处理

    基于手动解决这个问题可能有遗漏,我又问了另外一个问题。

    问题4:图片去重后会很多吗?
    回答4:不会很多,可能有几十个或一百多个。

    明确了图片不是很多,我提出一个方案:写个脚本下载所有图片,然后再人工确认。

    同事发出疑问5:文字在图片中,怎么判断图片是否有这个文字?
    回答5:图片全部下载下来,人眼看就行了。

    接着同事提出下个问题6:图片地址在数据库中,URL夹杂在其他文本中,怎么办?
    回答6:先从数据库导出含图片地址的文本数据,分析一下数据,处理一下数据,提取出图片地址即可。

    同事好像还是不明白的意思,于是我说:我来写这个工具吧。

    四、脚本工具

    问题很明确了,我们需要几步来处理。

    1、导出文本数据
    2、处理文本数据,得到所有图片地址并去重
    3、下载所有图片地址
    4、人工快速找到有对应文字的图片与地址

    第一步:一条 SQL导出数据。
    大概如下:

    1.  mysql -e "select field1,field2 from table"  > data_001.txt`
    

    第二步:分析数据特征。
    分析数据后,发现有下面三个特征。

    1、图片地址中没有逗号和空格,数据库中多个图片地址会用逗号或者分隔。
    2、对于图片地址,都是都有 http 前缀。
    3、部分图片地址,在 http 前有一些其他连续字符,大概格式时 xxx=http,而且 xxx 以数字为前缀。

    第三步:对数据标准化。
    我敲了几个命令就得到了想要的图片地址。

    1.  sed 's/[; ]/\n/g' #将所有的逗号和空格替换为换行`
    
    2.  grep "http" #筛选出图片地址`
    
    3.  sed 's/^[0-9]\+[^=]\+=//' #去除 xxx=  数字前缀`
    
    4.  sort  #排序`
    
    5.  uniq #去重`
    

    由此,就只剩最后一步:下载所有图。

    image

    下载后,windows 文件夹调整为 中等图标,就可以预览所有图标了。

    PS:同事又问怎么根据数字图片名找到图片地址呢? 我只说了两个字:行号。

    后来,我发现也可以不下载图片,于是我就生成了一个包含所有图片的 HTML, 浏览器打开就可以看到所有图片了。

    image

    五、最后

    当然,下载所有图片后,发现只有一张图片有目标文字。
    但是第二个方案却比第一个方案更可靠。

    因为第一个方案具有不确定性,万一没有彻底修复就需要花费很多时间再来一次。
    而第二个方案花了我五分钟,就 100% 确保彻底解决了这个问题。

    写这篇文档的目的是想告诉大家,很多事情可以通过脚本工具化来解决。
    而写这些脚本工具也并没有想象的那么难(并不需要图片识别),也没有浪费多少时间(5分钟)。
    但是,脚本化可以得到一个靠谱的解决方案。

    总的来说,通过分析问题,一步步拆解问题,原先不是很确定的人工处理的方案,通过写工具就变成一个非常可靠的解决方案了。

    2019-08-21 晴天 《完》

    -EOF-

    本文公众号:天空的代码世界

    个人微信号:tiankonguse

    QQ算法群:165531769(不止算法)

    知识星球:不止算法

    相关文章

      网友评论

        本文标题:临时需求也要写脚本工具

        本文链接:https://www.haomeiwen.com/subject/rebosctx.html