Python正则表达式内部循环
我正在尝试用正则表达式解析文档列表(无法使用用户BeautifulSoup)。我现在可以循环遍历文件夹中的每个txt文档,但我现在必须解析它们。我使用Python才几天,现在有点困惑 我想生成一个字典,ID为Python正则表达式内部循环,python,Python,我正在尝试用正则表达式解析文档列表(无法使用用户BeautifulSoup)。我现在可以循环遍历文件夹中的每个txt文档,但我现在必须解析它们。我使用Python才几天,现在有点困惑 我想生成一个字典,ID为,值为 文件的示例: <DOC> <DOCNO> 443 </DOCNO> <TEXT>Hello Word</TEXT> </DOC> <DOC> <DOCNO> 3745 </DOCNO
,值为
文件的示例:
<DOC>
<DOCNO> 443 </DOCNO>
<TEXT>Hello Word</TEXT>
</DOC>
<DOC>
<DOCNO> 3745 </DOCNO>
<TEXT> Hola amigo </TEXT>
</DOC>
443
你好词
3745
你好,朋友
到目前为止,我的代码是:
path = "data"
for filename in os.listdir(path):
print(filename)
file = open(path + "/" + filename)
page = file.read()
page = page.replace(' ', ' ')
//stuck here
doc_regex = re.compile("<DOC>.*?</DOC>", re.DOTALL)
docno_regex = re.compile("<DOCNO>.*?</DOCNO>")
text_regex = re.compile("<TEXT>.*?</TEXT>", re.DOTALL)
path=“数据”
对于os.listdir(路径)中的文件名:
打印(文件名)
文件=打开(路径+“/”+文件名)
page=file.read()
第页=第页。替换(“”,“”)
//困在这里
doc_regex=re.compile(“*”,re.DOTALL)
docno_regex=re.compile(“.*?”)
text_regex=re.compile(“*”,re.DOTALL)
最佳实践是在模块级编译一次正则表达式(而不是在for
循环中)。
例如,您可以编写:
重新导入
doc_regex=re.compile((*),re.DOTALL)
docno_regex=re.compile((*?)
text_regex=re.compile((*?),re.DOTALL)
第一次加载模式时,将编译正则表达式
注意:在正则表达式中,需要使用组“(…)”来检索每个标记的内容
有几个陷阱:
- 您应该使用
来计算文件的完整路径(在Windows上,路径分隔符是os.path.join
,而不是\
)/
就是为您这样做的os.path.join
- 应该使用
语句打开文件并指定文件编码。在文本模式下,如果未指定编码,则使用的编码取决于平台with
path=“数据”
对于os.listdir(路径)中的文件名:
fullpath=os.path.join(路径,文件名)
打印(文件名)
打开(完整路径,模式=“r”,编码=“utf-8”)作为fd:
page=fd.read()
要解析数据,可以使用re.findall
。还有其他的方法,还有
您可以使用doc_regex查找每个…
,然后使用docno_regex和text_regex查找docno和文本
在循环中,可以这样做:
用于doc_regex.findall(第页)中的doc_内容:
docno=docno_regex.findall(doc_内容)[0].strip()
text=text\u regex.findall(文档内容)[0].strip()
打印(文件编号、文本)
要在字典中存储每个条目,可以定义一个dict
,如下所示:
result={}
对于doc_regex.findall(第页)中的doc_内容:
docno=docno_regex.findall(doc_内容)[0].strip()
text=text\u regex.findall(文档内容)[0].strip()
结果[docno]=文本
你会得到:
{'3745':'Hola amigo','443':'Hello Word'}
为什么不能使用BeautifulSoup?这个怎么样
from simplified_scrapy.simplified_doc import SimplifiedDoc
html ='''
<DOC>
<DOCNO> 443 </DOCNO>
<TEXT>Hello Word</TEXT>
</DOC>
<DOC>
<DOCNO> 3745 </DOCNO>
<TEXT> Hola amigo </TEXT>
</DOC>
'''
xml = SimplifiedDoc(html)
docs = xml.selects('DOC')
dic = {}
for doc in docs:
dic[doc.DOCNO.text]=doc.TEXT.text
print (dic)
不能使用用户美化组,嗯,为什么?你能使用其他图书馆吗?
{'443': 'Hello Word', '3745': 'Hola amigo'}