目次
chatGPTへ相談
- 複数のマークダウンファイルがフォルダAに保存されています。あるキーワードを検索したいです。結果はマークダウンファイル名とそのキーワードが含まれる箇所を一覧表示させてください。またクリックするとそのマークダウンファイルの該当箇所が開くようにしてください。
- 検索結果はHTMLで表示させ、ハイパーリンクにしてください。
回答
結論:サクラエディタで検索したほうが簡単で便利。よって以下は却下。
- 以下のコードは、指定されたフォルダ内の複数のマークダウンファイルからキーワードを検索し、HTML形式で結果を表示し、ハイパーリンクとして該当箇所が開くようにするものです。
- このコードでは、BeautifulSoupを使用してHTMLの構造を解析し、キーワードに一致するテキストを検索します。検索結果はHTML形式で生成され、ファイル名はハイパーリンクとして表示されます。ファイルを開くためには、ブラウザで生成されたHTMLファイルを開くか、ファイルパスをクリックしてエクスプローラーやエディタで開くことができます。
- コードの最後の部分では、検索結果を”検索結果.html”という名前のファイルに保存しています。必要に応じてファイルの保存先やファイル名を変更してください。
import os
import re
from markdown import markdown
from bs4 import BeautifulSoup
def search_keyword_in_folder(folder_path, keyword):
results = []
for filename in os.listdir(folder_path):
if filename.endswith(".md"):
file_path = os.path.join(folder_path, filename)
with open(file_path, "r", encoding="utf-8") as file:
markdown_text = file.read()
html_content = markdown(markdown_text)
soup = BeautifulSoup(html_content, "html.parser")
matches = soup.find_all(text=re.compile(keyword, re.IGNORECASE))
for match in matches:
result = {
"filename": filename,
"location": str(match),
"filepath": file_path
}
results.append(result)
return results
def generate_search_results_html(search_results):
html = "<html><head><title>Search Results</title></head><body>"
for result in search_results:
html += f"<p>ファイル名: <a href='file://{result['filepath']}'>{result['filename']}</a></p>"
html += f"<p>該当箇所: {result['location']}</p>"
html += "<hr>"
html += "</body></html>"
return html
folder_path = "フォルダAのパス"
keyword = "検索キーワード"
search_results = search_keyword_in_folder(folder_path, keyword)
html_content = generate_search_results_html(search_results)
with open("検索結果.html", "w", encoding="utf-8") as file:
file.write(html_content)