当前位置: 首页 > 面试题库 >

如何在不将其全部读入内存的情况下对整个文件进行重新搜索或重新匹配?

葛晔
2023-03-14
问题内容

我希望能够在整个文件上运行正则表达式,但是我希望不必一次将整个文件读入内存,因为将来我可能会处理相当大的文件。有没有办法做到这一点?谢谢!

说明: 我无法逐行阅读,因为它可能跨越多行。


问题答案:

您可以使用mmap将文件映射到内存。然后可以像普通字符串一样访问文件内容:

import re, mmap

with open('/var/log/error.log', 'r+') as f:
  data = mmap.mmap(f.fileno(), 0)
  mo = re.search('error: (.*)', data)
  if mo:
    print "found error", mo.group(1)

这也适用于大文件,文件内容根据需要从磁盘内部加载。



 类似资料:
  • 问题内容: 我目前有一个搜索字段,使用此代码针对多个列进行搜索: 可以说我在表中有这两行: 如果我键入“ John S”,则仅第一个结果显示哪个是所需的行为。 如果我键入“ John Smith”,则仅第一个结果显示哪个是所需的行为。 如果我键入“ Smith J”,即使Bob不匹配,这两个结果也会显示。 如果我输入“ Smith John”,即使Bob不匹配,这两个结果也会显示。 最后,如果我键

  • 问题内容: 是否有一种隐藏的方法可以在 不 读取整行的 情况下 从文件或类似文件的对象读取令牌?我立即拥有的应用程序(其他人的问题,不是我的问题)正在将具有几个非常长的行的大型矩阵转置,本质上是对选择单个列元素的迭代器执行操作。这个想法不是在迭代过程中将整个文件存储在内存中。 这些行是用空格分隔的ASCII十进制数字。 对于Java的Scanner类,问题可能很简单,但我没有在Python标准库中

  • 在下面的代码中。有两个倒计时(黄色和红色),当条件改变时,显示屏上显示的倒计时控件将改变,即从黄色切换到红色,反之亦然。 然而,当它切换时,倒计时变为“重新初始化”。例如,假设黄色的初始计时器为60秒,在滴答40秒后,它会下降到剩下20秒。此时,条件改变两次,例如5秒,因此倒数计时器切换为红色并返回黄色。不是从15秒开始计时,而是从60秒开始重新启动。如何防止小部件的这种“重新初始化”,并允许计时

  • 问题内容: 我的页面结构是: 如何在不刷新整个页面的情况下更新/刷新组件? 一旦用户成功登录,我想在标题中隐藏“登录”链接。标题在所有组件/路由中都是通用的。 问题答案: 您可以使用 来在整个应用程序的不同组件之间进行通信。您可以定义一个数据共享服务,其中包含 您可以订阅和发出更改的服务。 定义数据共享服务 在您的 提供商条目中添加。 接下来,将导入到您和您在其中执行登录操作的组件中。在订阅主题更

  • 问题内容: 如何在不重新启动servlet容器的情况下刷新Spring配置文件? 我正在寻找JRebel以外的解决方案。 问题答案: 对于那些最近在这上面绊脚石的人来说,解决此问题的当前和现代方法是使用Spring Boot的Cloud Config。 只需添加注释你刷新豆类和你的主/配置。 因此,例如,以下Controller类: 在Spring Boot Actuator上(通过HTTP端点或

  • 问题内容: 我知道我可以用来将字符串字段设置为 特定新索引中的新字段 。 有没有办法将此设置 全局 应用-即为任何新索引中的任何字符串字段设置属性?(无需为每个新索引设置它) 问题答案: 是的,你可以通过创建一个实现这个指标模板上有一个映射类型和动态模板 然后,您可以在任何新索引中创建任何文档,并且所有字符串字段都将为 如果检查新创建的映射类型,则将看到该字段为