以下代碼查看 2500 個 markdown 檔案,總共 76475 行,檢查每個檔案是否存在兩個字串。
#!/usr/bin/env python3
# encoding: utf-8
import re
import os
zettelkasten = '/Users/will/Dropbox/zettelkasten'
def zsearch(s, *args):
for x in args:
r = (r"(?=.* " x ")")
p = re.search(r, s, re.IGNORECASE)
if p is None:
return None
return s
for filename in os.listdir(zettelkasten):
if filename.endswith('.md'):
with open(os.path.join(zettelkasten, filename),"r") as fp:
for line in fp:
result_line = zsearch(line, "COVID", "vaccine")
if result_line != None:
UUID = filename[-15:-3]
print(f'?[[{UUID}]] OR', end=" ")
這正確地給出了如下輸出:
?[[202202121717]] OR ?[[202003311814]] OR
,但在我的機器上運行幾乎需要兩秒鐘,我認為這太慢了。如果有的話,可以做些什么來讓它更快?
uj5u.com熱心網友回復:
主要瓶頸是您正在構建的正則運算式。
如果我們print(f"{r=}")在zsearch函式內部:
>>> zsearch("line line covid line", "COVID", "vaccine")
r='(?=.* COVID)'
r='(?=.* vaccine)'
(?=.*)前瞻是導致放緩的原因——而且它也不是必需的。
您可以通過搜索獲得相同的結果:
r=' COVID'
r=' vaccine'
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/424743.html
