我认为自己是python的初学者。我目前正在编写代码并且它运行得非常好。 问题是使用大量的子进程库调用来嵌入linux bash命令。 这样我就可以将1000行代码重写为80行。 这是我的一些代码:
if not OCRized(a):
p0=subprocess.check_call(["pdftk",a,"burst"])
print "splitting Pdf was successful........."
for i in range(len(pdf.pages)):
if (i>8):
nameBurst="pg_00"+str(i+1)+".pdf"
else:
nameBurst="pg_000"+str(i+1)+".pdf"
nameJPG="converted-"+str(i)+".jpg"
p1=subprocess.check_call(["convert","-density","300",nameBurst,"-depth","8",nameJPG])
print "Conversion to jpg was successful....."
nameHocr="converted-"+str(i)
p=subprocess.check_call(["tesseract",nameJPG,nameHocr,"-l","eng","hocr"])
print "tesseract did the job for the ",str(i+1),"page"
name2="page"+str(i)+".pdf"
p2=subprocess.check_call(["bash","-c","hocr-pdf .> reconstructed.pdf "])
print " Reconstruction is complete"
else:
p=subprocess.check_call(["tesseract",'1.png','f1',"-l","eng"])
那么这种方法可能产生什么问题呢? (代码有效,但我还是不相信)
答案 0 :(得分:1)
这是一个问题,可以为那些自以为是的答案敞开大门,所以......
要考虑的主要问题是:“它有效吗?”如果是的话,你应该问的另一个问题是,“我怎样才能让它变得更好?”
从python进行10次bash调用是否有意义?或者从bash进行10次python调用(使用python -m <your_API_here>
)?在一天结束时,您需要考虑您的用例,以及哪种方法更有意义。您打算将此软件分发给数百万用户吗?这是否需要与平台无关?等等。
通过你的代码,如果你用bash实现它们,你的代码似乎可以用管道进一步压缩。如果要调用某些python API,则始终可以像调用子进程一样分叉脚本。主要问题是,值得努力。问上面的一些问题可能有助于你做出决定。