将RegEx写入txt文件

将RegEx写入txt文件

问题描述:

我正在使用以下代码使用RegEx将我的输出打印到txt文件。不过我总是收到此错误信息:将RegEx写入txt文件

File "C:\lib\re.py", line 213, in findall 
return _compile(pattern, flags).findall(string) 

类型错误:预期字符串或字节状物体

import glob 
import os 
import re 


def extractor(): 
    os.chdir(r"F:\Test") 
    for file in glob.iglob("*.html"): # iterates over all files in the directory ending in .html 
     with open(file, encoding="utf8") as f, open((file.rsplit(".", 1)[0]) + ".txt", "w") as out: 
      contents = f.read() 
      extract = re.compile(r'RegEx', re.I | re.S) 
      if re.findall(extract, contents) is not None: 
       for x in re.findall(extract, contents): 
        out.write(x) 
      out.close() 
extractor() 

任何人的想法是什么原因导致这个错误?显然这与类型错误有关?

+0

使用're.compile(r'RegEx',re.I | re.S)'代替're.findall(r'RegEx',re.I | re.S)''。您必须有意在从“contents”中提取某些内容之前编译正则表达式。 –

+0

仍在我的代码行“out.write()”上收到错误消息。 TypeError:write()参数必须是str,而不是_sre.SRE_Pattern –

+0

是的,因为现在'extract'是一个正则表达式对象。你需要在那里写出re.findall的结果。对于re.findall(提取,内容)中的x:out.write(x)'或如果在模式中有多个捕获组,则对该元组进行连接。 –

略调整:

import glob 
import os 
import re 


def extractor(): 
    # you only need it once, dont' you? 
    extract = re.compile(r'RegEx', re.I | re.S) 
    os.chdir(r"F:\Test") 
    for file in glob.iglob("*.html"): # iterates over all files in the directory ending in .html 
    with open(file, encoding="utf8") as f, open((file.rsplit(".", 1)[0]) + ".txt", "w") as out: 
     contents = f.read() 
     for match in extract.findall(contents): 
      out.write(match) 
     out.close() 

extractor() 

它使用extract为对象,甚至不需要在循环的if not None检查。
如果仍然无法正常工作,请详细说明您的实际正则表达式(是否有多个组等?)。

+0

感谢您的帮助。不幸的是pycharm仍然给我一个错误信息:TypeError:write()参数必须是str,而不是元组。我更新了我的代码,你可以看到我的RegEx,但它应该没问题... –

+0

wie kommt man denn in den Chatraum? Dann kann ich dir mal ganz kurz schildern was mein Problem ist ohne hier den Rahmen mit Kommentaren zu sprengen –

+0

was das das denn gerade? –