我正在做一个项目(python语言),涉及到使用OCR (使用tesseract-ocr)从图像中获取文本并将其存储到文件中。然后,我必须逐个字符地读取文件,并对检测到的字符执行一些功能。我遇到的问题是,有时转换后创建的文件在文本文件的开头有很多空格(甚至是空行)。我不需要对空格使用任何函数,所以我想一次忽略它们,这样可以节省我的时间。我在raspberry-pi上运行代码,它的内存非常少,需要一些时间来比较每个字符并逐个跳过。
camera.capture('test.png')
camera.resolution = (1920, 1080)
camera.brightness = 60
call(["tesseract","/home/pi/Desktop/fyp_try/test.png","/home/pi/Desktop/fyp_try/totext"])
f = open('/home/pi/Desktop/fyp_try/totext.txt','r')
message = f.read()
print(message)
for i in message:
print(i)
if(i>='a')and(i<='z'):
lst=a[i]
lstoperate()
elif(i>='A')and(i<='Z'):
lst=a['dot']
stoperate()
time.sleep(2)
smol=i.lower()
lst=a[smol]
lstoperate()
elif (i>='0')and(i<='9'):
lst=a['numsign']
lstoperate()
print(ord(i))
..............对每个字符的操作之后是2-3秒的睡眠时间。当遇到空格时,也会发生这种情况。有没有办法可以在读取文件时忽略所有空格,直到文件中非空格字符的开头。
发布于 2019-03-29 08:38:22
如果您希望在一次操作中以较低的资源成本去除所有空格,那么您将希望避免使用split/join (它可以工作,但具有较高的临时内存成本)。
有两种明显的方法,惰性过滤方法:
from itertools import filterfalse
...
for i in filterfalse(str.isspace, message):
...它永远不会生成新的str,只是在运行过程中过滤掉您不关心的字符。
或者,要预先剥离它们(使初始内存消耗加倍,但随后下降到剥离版本所需的水平),请使用str.translate
from string import whitespace
dropspaces = str.maketrans('', '', whitespace)
...
message = f.read().translate(dropspaces)这将剥离所有ASCII空格,就像执行.replace(' ', '').replace('\n', '').replace('\r', '').etc...一样,但在一次传递中,会同时产生一个输出字符串,其中所有空格都会被剥离。
发布于 2019-03-29 08:30:28
可以使用John Szakmeister提到的各种条带和连接功能来完成。还有Can refer to this link。
https://stackoverflow.com/questions/55408693
复制相似问题