カテゴリー

Python基礎

【Mac&スクショ名】Macのスクショのファイル名を自動変更

2021年4月17日

テキストを置き換える

こんな人にオススメ


Macでスクショを大量に撮影したんだけど、ファイル名を変更するのが面倒!デフォルトで名前を変更することもできるけど時すでに遅し。
どうせならpythonでかっこよく決めたいんだけどいい方法ない?

ということで、今回は小技で、Macのスクリーンショットのファイル名をpythonを使用して一括変更する方法について紹介する。以前Macに入れているアプリ紹介をした際にスクリーンショットを撮りまくった。その時にファイル名変更について疑問に思ったのでここでメモ書きしておく。その記事については以下。
【M1 Mac】MacBook Proに入れているアプリ約40個ほど紹介

続きを見る

楽にファイル名変更をしたいというときに活用してほしい(一応、デフォルトのファイル名を変更することもできるが、個人的にはデフォルトは変えたくない派なので毎回変更する)。

python環境は以下。

  • Python 3.9.2
スポンサーリンク
スポンサーリンク

運営者のメガネです。TwitterInstagramも運営してます。

自己紹介はこちらから、お問い合わせはこちら。

運営者メガネ

pythonでファイル名変更

pythonを用いてファイル名変更をする場合は以下のステップを踏めば良い。

  1. ファイルをうまく絞り込めるような条件をつける
  2. ファイル名を変更
  3. ファイルを読み込む
  4. 変更後のファイル名になるように、ファイル名を決定する
  5. 作成したファイル名で元のファイル名を上書きしてファイル名を変更

今回は2種類のファイル名に変更する。

  • 年月日_時分秒
  • Y年M月D日h時m分s秒

元のファイル一覧は今回は以下。それぞれカタカナや空白、ハイフンそしてピリオドが入っている。

  • スクリーンショット 2021-04-17 12.40.51.png
  • スクリーンショット 2021-04-17 12.40.56.png
  • スクリーンショット 2021-04-17 12.40.58.png
  • スクリーンショット 2021-04-17 12.41.28.png
  • スクリーンショット 2021-04-17 12.41.42.png

下準備

まずはファイルの読み込み。

import glob
import re
import os

files = glob.glob("./*.png")
print(*files, sep='\\n')
# ./スクリーンショット 2021-04-17 12.41.42.png
# ./スクリーンショット 2021-04-17 12.40.58.png
# ./スクリーンショット 2021-04-17 12.40.51.png
# ./スクリーンショット 2021-04-17 12.41.28.png
# ./スクリーンショット 2021-04-17 12.40.56.png

これらの読み込んだファイル名を、数字か数字でないかに分けそして整理する。

# ファイル名から数字を抽出
num_none_lst = []
num_lst = []
for file in files:
    # 文字列を削除
    num_none = re.findall(r'\\d*', file)
    num_none_lst.append(num_none)
    # 発生した空白を削除
    number = list(filter(None, num_none))
    num_lst.append(number)

print(*num_none_lst, sep='\\n')
# ['', '', '', '', '', '', '', '', '', '', '', '', '2021', '', '04', '', '17', '', '12', '', '41', '', '42', '', '', '', '', '']
# ['', '', '', '', '', '', '', '', '', '', '', '', '2021', '', '04', '', '17', '', '12', '', '40', '', '58', '', '', '', '', '']
# ['', '', '', '', '', '', '', '', '', '', '', '', '2021', '', '04', '', '17', '', '12', '', '40', '', '51', '', '', '', '', '']
# ['', '', '', '', '', '', '', '', '', '', '', '', '2021', '', '04', '', '17', '', '12', '', '41', '', '28', '', '', '', '', '']
# ['', '', '', '', '', '', '', '', '', '', '', '', '2021', '', '04', '', '17', '', '12', '', '40', '', '56', '', '', '', '', '']
print(*num_lst, sep='\\n')
# ['2021', '04', '17', '12', '41', '42']
# ['2021', '04', '17', '12', '40', '58']
# ['2021', '04', '17', '12', '40', '51']
# ['2021', '04', '17', '12', '41', '28']
# ['2021', '04', '17', '12', '40', '56']

数字のみを抽出したい場合は正規表現で\\d*と指定すれば良い。しかし、re.findallの時点では数字でない箇所が空白文字列になっているので、それをfilterで削除している。

これで準備が整ったので、それぞれの方法に沿ってファイル名を構築する。

年月日_時分秒

完成例としては20210417_124051.pngというようなファイル名。まずは年月日と時分秒の間にアンダースコア_を入れる。そしてlistになっている年月日_時分秒を結合して1つの文字列に変換する。

# 年月日_時分秒

# 抽出した数字をつなげる
date_lst = []
for lst in num_lst:
    # 日付と時間の間にアンダースコアを入れる
    lst.insert(3, '_')
    date_lst.append(''.join(lst))
print(*date_lst, sep='\\n')
# 20210417_124142
# 20210417_124058
# 20210417_124051
# 20210417_124128
# 20210417_124056

完成版の文字列ができたので、os.renameでファイル名を変更する。os.rename(before, after)だ。

# ファイル名変更変更
for file, date in zip(files, date_lst):
    os.rename(file, f"{date}.png")

files2 = glob.glob("./*.png")
print(*files2, sep='\\n')
# ./20210417_124051.png
# ./20210417_124056.png
# ./20210417_124142.png
# ./20210417_124058.png
# ./20210417_124128.png

Y年M月D日h時m分s秒

完成例としては./2021Y04M17D12h40m56s.pngというようなファイル名。今回はYsなどの文字列を追加しないといけないので、forループを2回回して数字と記号を足していく。

# Y年M月D日h時m分s秒

date_str = 'YMDhms'

date_lst = []
for lst in num_lst:
    union = ''
    for num, symbol in zip(lst, date_str):
        union += num + symbol
    date_lst.append(union)
# 2021Y04M17D12h41m28s
# 2021Y04M17D12h40m56s
# 2021Y04M17D12h41m42s
# 2021Y04M17D12h40m51s
# 2021Y04M17D12h40m58s

先ほど同様、ファイル名を変更する。

for file, date in zip(files, date_lst):
    os.rename(file, f"{date}.png")

files2 = glob.glob("./*.png")
print(*files2, sep='\\n')
# ./2021Y04M17D12h40m56s.png
# ./2021Y04M17D12h40m51s.png
# ./2021Y04M17D12h41m28s.png
# ./2021Y04M17D12h40m58s.png
# ./2021Y04M17D12h41m42s.png

注意点

今回は2種類の方法でのファイル名変更を紹介したが、これらのコードを起動させると一瞬でファイル名が変更される。「変更しますか?」というような設定はしていないので、実際に使用する際にはコピーをとっておく、かつ、最初は少ないファイルで試すなどの対策をしておくことを推奨する。

Mac純正の機能でファイル名の一括変更

実はMacのFinderでもファイル名の一括変更が可能。ファイル名を変更したいファイルを選択し、右クリックすると以下のようなポップアップが出てくる。

複数ファイル選択からの右クリック

この中の「名称変更...」を選択すると以下のように文字置換の指定ができる「テキストを置き換える」がある。置換以外にも「テキスト追加」と「フォーマット」がある。使い方は知らん。

テキストを置き換える

今回は置換を用いて、最初の「年月日_時分秒」にファイル名を変更する。手順は以下だが、うまくいくようにすれば置換の順番は守らなくてもいい。

  1. スクリーンショット 」を「」(何も指定しない)にする
  2. -」を「」にする
  3. 12.」を「12」にする。この時、.だけだと拡張子も消される
  4. .2」を「2」にする
  5. .4」を「4」にする
  6. 「 ``」(空白)を「_」にする

工程が多い。pythonを起動せず、かつ完成形のファイル名に簡単に置き換えられるのであればこのFinderを使った方法でもいいだろう。

自動化の良い一例

今回は短いがMacのスクショのファイル名を一括変更するというコードを紹介した。プログラミングを使用して自動化するということの良い一例だと思う。プログラミングで何ができるのかと聞かれた時にこういう作業を自動化できると言えるだろう。

関連コンテンツ

スポンサーリンク

Amazonのお買い物で損したない人へ

1回のチャージ金額通常会員プライム会員
¥90,000〜2.0%2.5%
¥40,000〜1.5%2.0%
¥20,000〜1.0%1.5%
¥5,000〜0.5%1.0%

Amazonギフト券にチャージすることでお得にお買い物できる。通常のAmazon会員なら最大2.0%、プライム会員なら2.5%還元なのでバカにならない。

ゲットしたポイントは通常のAmazonでのお買い物に使えるからお得だ。一度チャージしてしまえば、好きなタイミングでお買いものできる。

なお、有効期限は10年だから安心だ。いつでも気軽にAmazonでお買い物できる。

Amazonチャージはここから出来るで

もっとお得なAmazon Prime会員はこちらから

30日間無料登録

執筆者も便利に使わせてもらってる

スポンサーリンク

  • この記事を書いた人

メガネ

独学でpythonを学び天文学系の大学院を修了。 ガジェット好きでMac×Android使い。色んなスマホやイヤホンを購入したいけどお金がなさすぎて困窮中。 元々、人見知りで根暗だったけど、人生楽しもうと思って良い方向に狂ったために今も人生めちゃくちゃ楽しい。 pythonとガジェットをメインにブログを書いていますので、興味を持たれましたらちょこちょこ訪問してくだされば幸いです🥰。 自己紹介→変わって楽しいの繰り返し

-Python基礎
-,