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

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

只有29行,你买不了吃亏,买不了上当,只有29行,而核心内容for循环只有10行而已,其他都是文件开关操作。
简单讲一下思路:
apath是原始文件路径,afile是原始文件。
gpath是通用路径,就是原始文件所在的文件夹的路径,因为要在同一位置创建分类文件,所以需要从afile的路径提取通用路径。
hfile、pfile、ofile是对应的分类文件,比如一个词目是h类的,就写入hfile中,是p类的,就写入pfile中。
mfile是完善时新增的,怕在过程中遇到“疑难杂症”或者“手残点错”,导致词目没有写到正确对应的文件中,因此,用else把这些出错的词目写到mfile里,方便后续处理。
第3行:[:-7] 是代表取apath的第一位到倒数第8位,相当于把最后的7个字符(文件名)去掉,从而得到文件所在文件夹路径。
比如:

这里的 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行:关闭所有的文件。

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

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


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

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


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


测试结果非常完美。
把分类的内容重新复制回Excel里就可以交工了。
不过在做分拣的时候,7322个词目很难一次做完,所以我又将这个工具进行了完善,加入了选择起始词目功能,中途退出功能和词目编号提示功能。就是,现在我有点累了,或者电脑有点累了(其实我也不care它累不累),想先休息一下,隔天继续。昨天那段代码是无法实现的,只能手动把原始文本中已经处理过的词目删掉。而现在呢,程序会在开始时问要从第几号词目开始,然后直接跳到该词目进行分拣。想休息时,按“0”保存做完的内容,然后提示你,本次做了多少个词目,下次应该从第几个词目开始。所以现在只要记下下次从第几个词目开始就可以无(fang)缝(xin)衔(tou)接(lan)了。
但!分拣的txt文档还是要自己存好,第二次开程序会覆盖掉之前的内容,懒得处理这个缺陷了……
其实,要实现上述功能,代码可以更简洁,只是这次是在之前做好的代码基础上进行的加工,没有改动主循环体,所以逻辑上略显繁琐。
先上代码:

简单说一下:
workdata是从data截取出的,从起始词目开始到最后的内容;
ordnum和count是两个计数器,前者记录词目序号,后者记录本次处理次数;
conflag和allendflag是两个状态标记,conflag控制while循环是否进行,allendflag控制是否进行46、47行的两句提示。
如果重新写的话,while循环和最后的条件语句可以捏合在一起,就不用两个状态标记了。
len(workdata) 是获取workdata这个列表的长度(有多少个项目),可以参考之前发过的实例分析。
int() 是将输入的字符串变成整型数字,以便做加减运算。
看一下完善之后的效果:

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

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

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