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