Python实例分析之制作半自动分拣工具

原创 码农  2019-12-23 12:57:53  阅读 572 次 评论 0 条

新项目,搜集了7322的词目,要按照其不同性质等进行分拣。

Python实例分析之制作半自动分拣工具 编程代码 第1张

本来想在Excel中手动操作,但是没进行几个就已经眼睛疼、手指疼。所以想着做一个半自动分拣工具。让程序自动显示词目,我只需要按照事先分类编号,按1、2、3键就可以把该词目写到相应的文件中,避免了反复command+c command+v的痛苦操作。

废话不多说,先来看一下代码

Python实例分析之制作半自动分拣工具 编程代码 第2张

只有29行,你买不了吃亏,买不了上当,只有29行,而核心内容for循环只有10行而已,其他都是文件开关操作。

简单讲一下思路:

apath是原始文件路径,afile是原始文件。

gpath是通用路径,就是原始文件所在的文件夹的路径,因为要在同一位置创建分类文件,所以需要从afile的路径提取通用路径。

hfile、pfile、ofile是对应的分类文件,比如一个词目是h类的,就写入hfile中,是p类的,就写入pfile中。

mfile是完善时新增的,怕在过程中遇到“疑难杂症”或者“手残点错”,导致词目没有写到正确对应的文件中,因此,用else把这些出错的词目写到mfile里,方便后续处理。


第3行:[:-7] 是代表取apath的第一位到倒数第8位,相当于把最后的7个字符(文件名)去掉,从而得到文件所在文件夹路径。

比如:

Python实例分析之制作半自动分拣工具 编程代码 第3张

这里的 all.txt 总共有7个字符,要把它们去掉。如果你的文件名不是这个,需要更改数字哦。


第8行:把afile的内容存到data变量中。

第9行:for循环针对data中每行内容line,

第10行:显示line内容

第11行:请求一个indicator,这是需要人工键入的分类号。

第12-17行:符合哪个分类,就在哪个分类文件中写入该行内容。

第18-19行:哪个都不符合(不键入,或键入其他内容)就写入mfile。

第20-24行:间隔符,避免看花眼了,顺便修饰一下屏幕。python中好像没有cls清屏这种命令,我也懒的调用系统指令(对我这个菜鸡来说,很容易出错)。

第25-29行:关闭所有的文件。


Python实例分析之制作半自动分拣工具 编程代码 第4张

原始txt内容


来测试一下吧(本来录了个屏,结果转成gif后容量太大,只能上图了),你萌就假装这是个gif动画吧……

Python实例分析之制作半自动分拣工具 编程代码 第5张

终端输入 python3.8,后面的内容可以通过拖拽来完成。拖拽文件到终端后,文本名后面会自动生成空格,需要删掉!

Python实例分析之制作半自动分拣工具 编程代码 第6张
Python实例分析之制作半自动分拣工具 编程代码 第7张

还是,拖拽后,文本名后面会自动生成空格,需要删掉!

Python实例分析之制作半自动分拣工具 编程代码 第8张

程序等待我们给第一个词目分类,同时桌面上自动生成了四个新的分类文件。

Python实例分析之制作半自动分拣工具 编程代码 第9张
Python实例分析之制作半自动分拣工具 编程代码 第10张

试着模拟手残漏按分类,直接回车键,看看效果。

Python实例分析之制作半自动分拣工具 编程代码 第11张
Python实例分析之制作半自动分拣工具 编程代码 第12张

测试结果非常完美。


把分类的内容重新复制回Excel里就可以交工了。

不过在做分拣的时候,7322个词目很难一次做完,所以我又将这个工具进行了完善,加入了选择起始词目功能,中途退出功能和词目编号提示功能。就是,现在我有点累了,或者电脑有点累了(其实我也不care它累不累),想先休息一下,隔天继续。昨天那段代码是无法实现的,只能手动把原始文本中已经处理过的词目删掉。而现在呢,程序会在开始时问要从第几号词目开始,然后直接跳到该词目进行分拣。想休息时,按“0”保存做完的内容,然后提示你,本次做了多少个词目,下次应该从第几个词目开始。所以现在只要记下下次从第几个词目开始就可以无(fang)缝(xin)衔(tou)接(lan)了。

但!分拣的txt文档还是要自己存好,第二次开程序会覆盖掉之前的内容,懒得处理这个缺陷了……


其实,要实现上述功能,代码可以更简洁,只是这次是在之前做好的代码基础上进行的加工,没有改动主循环体,所以逻辑上略显繁琐。


先上代码

Python实例分析之制作半自动分拣工具 编程代码 第13张

简单说一下:

workdata是从data截取出的,从起始词目开始到最后的内容;

ordnum和count是两个计数器,前者记录词目序号,后者记录本次处理次数;

conflag和allendflag是两个状态标记,conflag控制while循环是否进行,allendflag控制是否进行46、47行的两句提示。

如果重新写的话,while循环和最后的条件语句可以捏合在一起,就不用两个状态标记了。


len(workdata) 是获取workdata这个列表的长度(有多少个项目),可以参考之前发过的实例分析。

int() 是将输入的字符串变成整型数字,以便做加减运算。


看一下完善之后的效果:

Python实例分析之制作半自动分拣工具 编程代码 第14张

开始时需要输入起始词目号,如图,我们从第14个词目开始,然后程序会提示你一共还需要处理多少个词目,并逐一开始。


Python实例分析之制作半自动分拣工具 编程代码 第15张

如果想退出,按“0”就可以了,程序会提示本次已处理了多少词目,下次应该从第几个词目开始。


Python实例分析之制作半自动分拣工具 编程代码 第16张

如果都处理完了,程序会提示“所有词目均已分拣。”

本文地址:https://www.itcodeit.com/post/27.html
版权声明:本文为原创文章,版权归 码农 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?