从文件读取时一次跳过所有空间

时间:2019-03-29 00:10:38

标签: python python-3.x

我正在做一个项目(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秒。遇到空格时也会发生这种情况。 我有什么办法可以在读取文件时一次忽略所有空格,直到文件中非空格字符的开头。

2 个答案:

答案 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