我正在做一个项目(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秒。遇到空格时也会发生这种情况。 我有什么办法可以在读取文件时一次忽略所有空格,直到文件中非空格字符的开头。
答案 0 :(得分:2)
如果要在单个操作中以低资源成本剥离所有空白,则要避免使用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)
这将像执行.replace(' ', '').replace('\n', '').replace('\r', '').etc...
一样剥离所有ASCII空格,但是仅需一次通过,就产生了一个输出字符串,其中所有空白都被立即剥离了。
答案 1 :(得分:0)
可以使用John Szakmeister提到的各种剥离和联接功能来完成。 也 Can refer to this link。