カテゴリー

当サイトはアフィリエイトプログラムによる収益を得ています〈景品表示法に基づく表記です)

Python基礎

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

2021年4月17日

テキストを置き換える

こんな人にオススメ


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

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

続きを見る

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

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

ガジェット

2023/9/18

【デスクツアー2022下半期】モノは少なく、でも効率的に Desk Updating #0

今回はガジェットブロガーなのにデスク環境を構築していない執筆者の ...

ライフハック

2023/9/16

【Audible vs YouTube Premium】耳で聴く音声学習コンテンツを比較

ワイヤレスイヤホンが普及し耳で学習することへのハードルが格段に下 ...

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

2023/9/18

【SENNHEISER MOMENTUM True Wireless 3レビュー】全てが整ったイヤホン

今回は高音質・高機能なSENNHEISERのフラグシップ完全ワイヤレスイヤホン「SENNH ...

ライフハック

2023/3/11

【YouTube Premiumとは】メリットしかないから全員入れ

今回はYouTube Premiumを実際に使ってみてどうなのか、どんなメリット/デメリット ...

マウス

2023/8/17

【Logicool MX ERGOレビュー】疲れない作業効率重視トラックボールマウス

こんな人におすすめ トラックボールマウスの王道Logicool MX ERGOが気になるけどऩ ...

ベストバイ

2023/9/18

【ベストバイ2022】今年買って良かったモノのトップ10

2022年ベストバイ この1年を振り返って執筆者は何を買ったのか。ガジェッ& ...

スマホ

2023/1/15

【楽天モバイル×povo2.0の併用】月1,000円の保険付きデュアルSIM運用

こんな人におすすめ 楽天モバイルとpovo2.0のデュアルSIM運用って実際のとこ ...

マウス

2023/9/16

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

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

macOSアプリケーション

2022/9/30

【Chrome拡張機能】便利で効率的に作業できるおすすめの拡張機能を18個紹介する

こんな人におすすめ Chromeの拡張機能を入れたいけど、調べても同じような ...

macOSアプリケーション

2023/5/3

【Automator活用術】Macで生産性を上げる作業の自動化術

今回はMacに標準でインストールされているアプリ「Automator」を使ってできる ...

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

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

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

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

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

  • この記事を書いた人

メガネ

Webエンジニア駆け出し。独学のPythonで天文学系の大学院を修了。常時金欠のガジェット好きでM2 Pro MacBook Pro(30万円) x Galaxy S22 Ultra(17万円)使いの狂人。自己紹介と半生→変わって楽しいの繰り返しレビュー依頼など→お問い合わせ運営者情報、TwitterX@m_ten_pa、 YouTube@megatenpa、 Threads@megatenpa

-Python基礎
-,