从文件中读取时一次跳过空格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从文件中读取时一次跳过空格相关的知识,希望对你有一定的参考价值。

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

答案

如果要在资源成本较低的单个操作中去除所有空白,则需要避免使用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(' ', '').replace(' ', '').etc...一样,但是在一次传递中,生成一个输出字符串,同时剥离所有空格。

另一答案

可以使用John Szakmeister提到的各种条带和连接功能来完成。还有Can refer to this link

以上是关于从文件中读取时一次跳过空格的主要内容,如果未能解决你的问题,请参考以下文章

如何修复循环错误一次跳过1个值?

从 excel/文本文件中读取而不跳过空格,除非由选项卡制作

MATLAB 读取数据 怎么跳过空格 和 空行

C语言文件读取fscanf(),该怎么处理

c语言怎么从文件中读取数据,在线等,急求。

在使用 python 写入时从日志文件中读取