我有一个第一个文件(大小约为 1-3 kb),其中有几行如下所示:
Name1
Name2
Name3
Name4
还有第二个文件(大小为 1.2 GB),其中的行如下所示:
<root><img>url</img><title>Name1</title>(здесь еще несколько тегов)</root>
第二个文件包含第一个文件的所有名称(以及与 1 相同的文件的名称),只有额外的。信息。
我需要代码遍历文件1的每一行,从那里取一个名称并使用它在文件2中查找具有相同名称的标签.找到包含所需名称的标签后,您需要复制父根标签和里面的一切。
这是我写的代码:
import re
my_list = [12, 13, 14, 17, 18, 19, 21, 22, 23, 24] #идентификатор файла после имени
with open('main_data_file.xml', 'r', encoding='utf-8') as f:
txt = ''.join(f.readlines())
for i in my_list:
cat_name = "catalog_" + str(i) + ".xml"
data_name = "main_data_catalog" + str(i) + ".xml"
with open(cat_name, 'r', encoding='utf-8') as g, open(data_name, 'a', encoding='utf-8') as x:
for element in g.readlines():
line_regexp = r'.*<title>{}</title>.*'.format(element.strip())
matches = re.search(line_regexp, txt, re.MULTILINE)
try:
x.write(matches.group(0) + "\n")
except AttributeError:
pass
它正在工作,只是速度很慢,我需要加快这段代码的速度
问题:我怎样才能加快这段代码,至少到 2-3 秒的一行(而不是 10-15 秒的一行)
我搜索并找到了一种相当有效的方法
set()它以相当高的速度工作并且适合我,如果有优化技巧,请写在评论中