【问题标题】:python -regex match and for loop that run file line by linepython -regex 匹配和for循环逐行运行文件
【发布时间】:2012-09-24 17:05:59
【问题描述】:

所以我试图将文件的每一行与正则表达式匹配,我做了以下操作:

import re
regex='\S+\s+(\S{6})\s+VAR'
with open('/home/jyt109/humsavar.txt') as humsavar:
    for line in humsavar:
        match=regex.search(line)
        print match.group(1)

预期输出是每行中的特定 6 个字符,但我收到如下错误:

Traceback (most recent call last):
  File "exercise.py", line 74, in <module>
    match=regex.search(line)
AttributeError: 'str' object has no attribute 'search'

我发现(从下面的链接)为了将正则表达式与文件的每一行匹配,必须首先通过 file.read() 将文件转换为列表

Match multiline regex in file object

要重新处理帖子,有没有更简单的方法(最好超过 1 行而不是 2 行)?

humsavar=open('/home/jyt109/humsavar.txt')
text=humsavar.read()

谢谢!

【问题讨论】:

  • 你能把样本文件和预期的输出。比如你在搜索什么

标签: python regex file loops for-loop


【解决方案1】:

我认为您可能误解了该链接的含义。如果您的正则表达式匹配可以跨越多行,那么您需要使用file.read() 读取文件。如果换行符永远不会成为匹配项的一部分,那么您可以逐行读取文件并尝试分别匹配每一行。

如果你想单独检查每一行,你可以使用file.readlines()来获取行列表或者只是遍历文件对象,例如:

with open('/home/jyt109/humsavar.txt') as f:
    for line in f:
        match = regex.search(line)

假设您仍然想一次读取整个文件内容,您可以像这样在一行中执行此操作:

text = open('/home/jyt109/humsavar.txt').read()

【讨论】:

    【解决方案2】:

    .read() 不会将文件转换为列表(.readlines() 会);而是将整个文件放入一个字符串中。

    但即便如此,您也可以使用正则表达式:当使用 re.MULTILINE 编译它时,锚点 ^$ 将匹配各行的开头和结尾:

    >>> regex = re.compile(r"^Match this regex in each line$", re.MULTILINE)
    >>> regex.findall(text)
    

    结果将是所有匹配项的列表。

    【讨论】:

      【解决方案3】:

      这是一个简单的单行。我在下面的数据文件上对其进行了测试。使用正则表达式时,使用Raw String Notation 很方便,如下所示。我不知道您的数据文件应该是什么样子,但我只是制作了一个与您指定的搜索模式匹配的文件。

      代码

      import re
      print re.findall(r'\S+\s+(\S{6})\s+VAR', open('/tmp/test.txt').read())
      

      输出

      ['000001', '000002', '123456']
      

      test.txt

      x 000001 VAR
      x 000002 VAR
      x 123456 VAR
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-26
        • 2016-11-10
        • 2016-07-18
        • 2013-03-28
        • 2013-08-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多