将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()
任何人的想法是什么原因导致这个错误?显然这与类型错误有关?
略调整:
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
检查。
如果仍然无法正常工作,请详细说明您的实际正则表达式(是否有多个组等?)。
感谢您的帮助。不幸的是pycharm仍然给我一个错误信息:TypeError:write()参数必须是str,而不是元组。我更新了我的代码,你可以看到我的RegEx,但它应该没问题... –
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 –
was das das denn gerade? –
使用're.compile(r'RegEx',re.I | re.S)'代替're.findall(r'RegEx',re.I | re.S)''。您必须有意在从“contents”中提取某些内容之前编译正则表达式。 –
仍在我的代码行“out.write()”上收到错误消息。 TypeError:write()参数必须是str,而不是_sre.SRE_Pattern –
是的,因为现在'extract'是一个正则表达式对象。你需要在那里写出re.findall的结果。对于re.findall(提取,内容)中的x:out.write(x)'或如果在模式中有多个捕获组,则对该元组进行连接。 –