Python如何shell循环读取文件txt文件的内容?

这两天搞脚本,花费不少时间。

Python和Shell都可以获取文本内容,网上许多资料介绍的都不具体。简单的使用Python和Shell写了脚本。

 #以读方式打开文件,rb为二进制方式(如图片或可执行文件等)

#定义了要读取文件的路径

本文最初写于2015年5月,最近Tesseract推出了3.05版,加入了一些新的特性;且原文存在一些纰漏,现重新编写。

对于Tesseract这种C++编写的库采用可执行文件方式通过shell来建立库和Python的通信似乎无可厚非,但PyTesser在这里就犯了几个致命的错误:

  • Tesseract版本过老且不可手动替换文件升级,其Tesseract版本为2007年之前版本;
  • PyTesser提供的接口代码效率不高(当时Tesseract支持度不高的原因)。

总的来说,除非PyTesser作出升级,否则PyTesser是基本没有价值的,不推荐使用。

Tesseract在进入3.0版本后各方面功能都有了长足的发展,尤其是3.02.02版本开始提供C-API,使得通过动态链接库与其他编程语言混合开发成为了可能。

这里介绍两种方法,一种是类似PyTesser的通过shell与tesseract通信完成识别过程;另一种是通过动态链接库(Windows下即DLL)实现。

其中imagename为输入图片路径,outputbase为输出文本文件路径,此文本文件内容为图片文本识别结果。

所以通过shell实现的简单步骤就是

安装完成后在shell中输入

注意:安装得到的Tesseract自带英文语言包,本文仅演示英文效果;如需中文请自行下载中文语言包,并修改相关命令。

# cleanup为True则识别完成后删除生成的文本文件

上述3中调用方式得到相同的结果。

通过动态链接库相对与shell方式有几个优点:

  • 无需安装Tesseract(一般由自身自带DLL文件)
  • 无需生成文本文件再读取,直接调用方法返回识别得到的字符串

Windows下编译得到DLL文件也可以参考我的这篇文章:。

对加载DLL和调用API作封装。

关于对x86和x64进行区分的原因,参见我的另一篇文章。

关于更多的API调用方法,还请自行寻找。

对比来说,shell方法和DLL方法各有优劣,但总的来说DLL方法更胜一筹,由于少了一次磁盘写入和读取,在性能上也更优。不管怎样,PyTesser实在是没有继续用下去的意义了。

在介绍DLL方法的时候本来想介绍直接向API传入图片数据(不读取文件)进行识别的,但折腾PIL库没有成功,不过网上倒有通过opencv成功的例子,但opencv太过重量级这里就不介绍了,感兴趣的话可以看参考链接。

我要回帖

更多关于 shell循环读取文件 的文章

 

随机推荐