カテゴリー

Python基礎

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

2021年4月17日

テキストを置き換える

こんな人にオススメ


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

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

こんな人におすすめ MacBookを購 ...

続きを見る

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

python環境は以下。

  • Python 3.9.2

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

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

運営者メガネ

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

スイッチボット

2022/11/28

【SwitchBotロックレビュー】これからのスタンダードになりうるスマートロック

こんな人にオススメ SwitchBotからスマートロック「SwitchBotロック」が発売された ...

生活に役立つ

2022/11/28

【メガネ厳選】クソ便利に使っているサービスやアイテム達

このページでは執筆者「メガネ」が実際に使って便利だと感じているサ ...

マウス

2022/9/11

【Logicool MX ERGO vs MX Master 3】ERGOをメインにした決定的な理由

こんな疑問・お悩みを持っている人におすすめ 執筆者はLogicoolのハイエンӠ ...

完全ワイヤレスイヤホン(TWS)

2022/11/21

【ながら聴きイヤホン比較】SONY LinkBuds、ambie、BoCoはどれがおすすめ?

こんな人におすすめ 耳を塞がない開放型のイヤホンに完全ワイヤレスӟ ...

macOSアプリケーション

2022/10/15

【M1 Mac】MacBook Proに入れている便利でニッチなアプリを21個紹介する

こんな人におすすめ MacBookを購入してLINEとか必要最低限のアプリは入れた。 ...

完全ワイヤレスイヤホン(TWS)

2022/10/23

【SENNHEISER MOMENTUM True Wireless 3レビュー】高レベルでバランス型の高音質イヤホン

こんな人におすすめ SENNHEISER MOMENTUM True Wireless 3って実際のところどうなの? 評判は良い ...

完全ワイヤレスイヤホン(TWS)

2022/11/21

【SONY WF-1000XM4レビュー】神とゴミのハーフ&ハーフ

こんな人におすすめ SONYのフラグシップモデル「SONY WF-1000XM4」ってどれくらい性 ...

完全ワイヤレスイヤホン(TWS)

2022/8/19

【Nothing ear (1)レビュー】ライトな完成度、アップデートに期待

こんな人にオススメ 完全ワイヤレスイヤホン(TWS)でスケルトンボディ ...

Pythonを学びたいけど独学できる時間なんてない人へのすゝめ

執筆者は大学の研究室・大学院にて独学でPythonを習得した。

でも社会人になったら独学で行うには時間も体力もなくて大変だ。

時間がない社会人だからこそプロの教えを乞うのが効率的。

ここでは色んなタイプに合ったプログラミングスクールの紹介をする。

  • この記事を書いた人

メガネ

ベンチャー企業のWebエンジニア駆け出し。独学のPythonで天文学系の大学院を修了→新卒を1.5年で辞める→転職→今に至る。
常時金欠のガジェット好きでM1 MacBook Pro x Galaxy S22 Ultraの狂人。
人見知りで根暗だったけど、人生楽しもうと思って良い方向に狂う→人生が楽しい

ガジェットのレビューとPythonコードを記事にしています。ぜひ楽しんでください🦊
自己紹介と半生→変わって楽しいの繰り返し

-Python基礎
-,