ターミナルにコマンドを打ち込むことによって、PC内のフォルダやファイルにアクセスする方法を最近勉強したのでまとめました。
今回の記事の知識を利用してできること
複数のディレクトリの中から特定のファイルのみを抜き出し、別のディレクトリにまとめる。
(1)特定のファイルのみを探してくる
いくつかやり方はあるようです。具体的には
- osモジュール
- globモジュール
- pathlibモジュール
などが挙げられます。
どうやらpathlibモジュールはPython3.4から追加された新しいモジュールのようです。
本記事ではpathlibモジュールを用いる方法を中心に取り上げます。
pathlibモジュールを使ってディレクトリ内の特定のファイルを検索する
pathlibを使うのに追加インストールは不要ですが import
は必要です。
import pathlib
例えば以下のようなディレクトリ・ファイルがあるとします。
fruits/
├─ apple.csv
├─ banana.txt
└─ cherry.csv
fruitsディレクトリ内にあるCSVファイルを検索する時は以下のようにpathlibモジュールのglobメソッド(≠globモジュール)を使用します。
p = pathlib.Path('./fruits') # この行でどこのディレクトリを検索するか指定する
# これを「Pathオブジェクトを生成する」と呼ぶ
for name in p.glob('*.csv'):
print(name)
# * は正規表現で「どんな文字列が入っても良い」という意味
>> ./fruits/apple.csv
>> ./fruits/cherry.csv
(2)探してきたファイルを新しく作ったディレクトリに移動する。
現在、以下のようなファイル・ディレクトリの構造になっているとします。
food
└──fruits/
├─ apple.csv
├─ banana.txt
└─ cherry.csv
ディレクトリの作成にはosモジュールを使用します。
import os
os.makedirs('food/dessert', exist_ok=True)
すると以下のようなファイル・ディレクトリの構造になります。
food
├── fruits/
│ ├─ apple.csv
│ ├─ banana.txt
│ └─ cherry.csv
└── dessert/
ファイルの移動にはshutilモジュールを用います。
shutil.move()
の第一引数に移動させたいファイルやディレクトリのパスを、第二引数に移動先のディレクトリのパスを指定します。
移動させたいファイルが一つだけの場合は以下のようなコードを書くとファイルを移動させることができます。
import shutil
new_path = shutil.move('food/fruits/apple.csv', 'food/dessert/')
print(new_path)
>> food/dessert/apple.csv
複数のファイルを移動させたい場合は以下のようなコードを書くと良いです。
p = pathlib.Path('./fruits')
for name in p.glob('*'.csv):
new_path = shutil.move
参考文献
"[Python] ファイル名やフォルダ名の一覧を取得する". Hbk project. 2019/07/13. https://hibiki-press.tech/python/os-listdir-glob-glob-os-wal/1323#toc7, (2022/12/17).
"Pythonにおけるpathlibモジュールの利用方法を現役エンジニアが解説【初心者向け】". TechAcademy. 2018/02/05. https://magazine.techacademy.jp/magazine/29056, (2022/12/29).
nkmk. "Python, pathlibでファイル一覧を取得(glob, iterdir)". note.nkmk.me. 2018/10/01. https://note.nkmk.me/python-pathlib-iterdir-glob/, (2022/12/17).
TATSUO IKURA. "条件に一致するファイルやディレクトリの一覧を取得する(pathlibモジュール)". Java Drive. https://www.javadrive.jp/python/file/index15.html, (2022/12/17).
nkmk. "Pythonでファイル・ディレクトリを移動するshutil.move". note.nkmk.me. 2018/09/26. https://note.nkmk.me/python-shutil-move/, (2022/12/17).