今回の内容
前回は、記事のリンクが正しいか確認するスクリプトを紹介しました。
それと同様に、自動投稿の場合、画像のリンクが切れていて、うまく画像が投稿できないということがあります。
そこで、リンクト同様に画像についてもきちんと画像が存在しているか確認するスクリプトを今回は紹介します。
コード
def handle_image_files(file_path):
# マークダウンファイルを読み込む
with open(file_path, 'r') as file:
content = file.read()
# 画像のパスを取り出す
image_paths = re.findall(r'!\[.*?\]\((.*?)\)', content)
# マークダウンファイルのディレクトリパスを取得
markdown_dir = os.path.dirname(file_path)
img_dir = markdown_dir.replace(base_path + 'blog/',base_path + 'blog/images/')
# 画像パスの確認と処理
for image_path in image_paths:
if image_path[:4] == 'http':
continue
# マークダウンファイルのディレクトリからの相対パスを絶対パスに変換
original_image_path = os.path.join(img_dir, os.path.basename(image_path))
# 画像ファイルが存在するか確認
if not os.path.isfile(original_image_path):
# どこにも画像がない場合はファイル名を出力
print(f'{file_path} : {file_name}が見つかりません')
コードの解説
このPythonコードは、Markdownファイル内に埋め込まれた画像ファイルのパスを確認し、指定されたディレクトリ内に画像ファイルが存在するかどうかをチェックするスクリプトです。以下で、コードの各部分を詳しく解説します。
ファイルの読み込み
with open(file_path, 'r') as file:
content = file.read()
この部分では、指定されたMarkdownファイルを開き、その内容を content
変数に読み込みます。
画像パスの抽出
image_paths = re.findall(r'!\[.*?\]\((.*?)\)', content)
ここでは、正規表現を用いてMarkdownファイル内の画像パスを抽出しています。具体的には、Markdownの画像埋め込み記法(例:![alt text](image_path)
)に基づいて、画像のパスを取得します。
マークダウンファイルのディレクトリパスの取得
markdown_dir = os.path.dirname(file_path)
img_dir = markdown_dir.replace(base_path + 'blog/', base_path + 'blog/images/')
この部分では、Markdownファイルが存在するディレクトリのパスを取得し、そのパスを使って画像が格納されるディレクトリ(img_dir
)を推測しています。
base_path
は、プログラム内で定義されている基本パスであり、blog/
ディレクトリをblog/images/
に置き換えて、画像ディレクトリを取得しています。
この部分はご自身の管理しているフォルダ構造に合わせて変更してください。
画像パスの確認と処理
for image_path in image_paths:
if image_path[:4] == 'http':
continue
original_image_path = os.path.join(img_dir, os.path.basename(image_path))
if not os.path.isfile(original_image_path):
print(f'{file_path} : {file_name}が見つかりません')
ここでは、抽出した画像パスについて次の処理を行います:
– 画像パスがhttp
で始まる場合は、外部リンクとみなしてチェックをスキップします。
– os.path.join
を使用して、画像パスを絶対パスに変換します。ここで、os.path.basename(image_path)
は画像ファイル名のみを取得し、それを画像ディレクトリパスに結合します。
– 画像ファイルが指定されたディレクトリ内に存在するかを os.path.isfile
で確認し、存在しない場合は、画像が見つからない旨を出力します。