首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文件读取时一次跳过所有空格

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

Stack Overflow用户
提问于 2019-03-29 08:10:38
回答 2查看 71关注 0票数 2

我正在做一个项目(python语言),涉及到使用OCR (使用tesseract-ocr)从图像中获取文本并将其存储到文件中。然后,我必须逐个字符地读取文件,并对检测到的字符执行一些功能。我遇到的问题是,有时转换后创建的文件在文本文件的开头有很多空格(甚至是空行)。我不需要对空格使用任何函数,所以我想一次忽略它们,这样可以节省我的时间。我在raspberry-pi上运行代码,它的内存非常少,需要一些时间来比较每个字符并逐个跳过。

代码语言:javascript
复制
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秒的睡眠时间。当遇到空格时,也会发生这种情况。有没有办法可以在读取文件时忽略所有空格,直到文件中非空格字符的开头。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-29 08:38:22

如果您希望在一次操作中以较低的资源成本去除所有空格,那么您将希望避免使用split/join (它可以工作,但具有较高的临时内存成本)。

有两种明显的方法,惰性过滤方法:

代码语言:javascript
复制
 from itertools import filterfalse

 ...

 for i in filterfalse(str.isspace, message):
     ...

它永远不会生成新的str,只是在运行过程中过滤掉您不关心的字符。

或者,要预先剥离它们(使初始内存消耗加倍,但随后下降到剥离版本所需的水平),请使用str.translate

代码语言:javascript
复制
 from string import whitespace

 dropspaces = str.maketrans('', '', whitespace)

 ...

 message = f.read().translate(dropspaces)

这将剥离所有ASCII空格,就像执行.replace(' ', '').replace('\n', '').replace('\r', '').etc...一样,但在一次传递中,会同时产生一个输出字符串,其中所有空格都会被剥离。

票数 2
EN

Stack Overflow用户

发布于 2019-03-29 08:30:28

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55408693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档