使用python re

时间:2018-08-02 09:27:00

标签: python regex

我有一个大型文本文件(> 200mb),具有70k行。现在,我想在每行中找到一些特殊的文本,然后在每行的末尾再次放置它(用$符号分隔)。 N ++和Regex可以工作,但是速度有点慢,所以我想在python上尝试一下。

对于代码,我将得到fn.write(text + run +“ \ n”)的“ TypeError:必须为str,而不是列表”

import re

with open('Testfile.txt', mode='r', encoding='utf-8', errors='ignore') as f:
    for line in f.readlines():
        text = line.replace("\n","$")
        run = re.findall(r'Typ: (.*?);', line) or "0"
        print(text+run)

        with open ("NEWTest.txt", mode="w") as fn:
            fn.write(text+run+"\n")

有人知道该错误,也知道是否有更快的方法(代码)吗?

2 个答案:

答案 0 :(得分:2)

尝试

import re

with open('Testfile.txt', mode='r', encoding='utf-8', errors='ignore') as f:
    for line in f.readlines():
        text = line.replace("\n","$")
        run = re.findall(r'Typ: (.*?);', line) or "0"


        with open ("NEWTest.txt", mode="w") as fn:
            fn.write(text + ''.join(run) + "\n")

with open('Testfile.txt', mode='r', encoding='utf-8', errors='ignore') as f:
    for line in f.readlines():
        text = line.replace("\n","$")
        run = re.search(r'Typ: (.*?);', line) or "0"


        with open ("NEWTest.txt", mode="w") as fn:
            fn.write(text + run + "\n")

答案 1 :(得分:1)

re.findall returns a list of strings-即在提供给它的文本中找到的所有匹配项。

$.fancybox.open({
  type : 'iframe',
  src  : "data:application/pdf;base64,' + data + '",
  iframe : {
    css : {
      width: '80%',
      height: '80%'
    }
  }
});

要在末尾再次包含它,可以将所有匹配项结合在一起:

>>> import re
>>> re.findall(r'Typ: (.*?);', 'Typ: foobar;')
['foobar']

如果您只想进行一场比赛,则可以改用 fn.write(text + ''.join(run) + "\n")

re.search

它适用于您的示例:

>>> re.search(r'Typ: (.*?);', 'Typ: foobar;').group(1)
'foobar'

但是,如果没有匹配项,>>> re.search(r'Typ: (.*?);', 'Typ: Mehrfamilienhaus;').group(1) 'Mehrfamilienhaus' 会给出re.search,因此您可以在尝试检索None之前检查是否已找到正确的匹配项(就像您在group

findall