Pythonでディレクトリやファイルの操作を行う【os】モジュール
- 公開日:2018/12/03
- 更新日:2019/01/29
- 投稿者:n bit
Pythonの組み込みモジュール『os』モジュールを使って通常OS側で行うようなファイルやディレクトリに関する操作方法の解説。ファイルやディレクトリの移動、一覧の取得等を学習します。
この記事は約 分で読めます。(文字)
osモジュールとは
osモジュールはPythonの組み込みモジュールの1つ。ファイルやディレクトリに関する操作は通常WindowsやMac、LinuxなどのOS操作で行いますが、それらの操作をOS側に依存させずPython側で行うためのモジュールです。
- osモジュール:ファイルやディレクトリに関する操作を行う組み込みモジュール
ファイルやディレクトリの一覧の取得、パスの取得やディレクトリの移動等をこのモジュールで行うことができます。
osモジュールの使い方
具体的なosモジュールの利用方法を確認していきましょう。osモジュール内には数多くの関数がありますが、いくつか利用頻度が高いものから解説していきます。
今回は以下のようなディレクトリやファイルを持ったディレクトリ内をosモジュールを使って実際に操作してみましょう。
操作対象のディレクトリ構成(/Users/〇〇/Documents/os_test内)
.
├── dir1
│ ├── dir1-1
│ │ ├── file1.txt
│ │ ├── file2.txt
│ │ └── file3.txt
│ ├── file1.txt
│ ├── file2.txt
│ └── file3.txt
├── dir2
│ ├── file1.txt
│ ├── file2.txt
│ └── file3.txt
├── dir3
│ ├── file1.txt
│ ├── file2.txt
│ └── file3.txt
└── main.py
getcwd():カレントディレクトリを確認
『getcwd()』は現在のディレクトリパスを取得する関数です。
import os
print(os.getcwd())
出力結果
/Users/〇〇/Documents/os_test
chdir(パス):ディレクトリの移動
『chdir()』はディレクトリを変更する関数です。引数には移動先のディレクトリパスを指定します。
import os
ch_path = './dir1'
os.chdir(ch_path)
print(os.getcwd())
ch_path = '../'
os.chdir(ch_path)
print(os.getcwd())
出力結果
/Users/〇〇/Documents/os_test/dir1
/Users/〇〇/Documents/os_test
listdir(パス):ディレクトリやファイル名をリストで取得
『listdir()』はディレクトリやファイル名をリストオブジェクトで取得する関数です。引数にはリストを取得したいディレクトリパスを指定します。
import os
root_path = '.'
print(os.listdir(root_path))
出力結果
['dir2', 'dir3', 'dir1', 'main.py']
scandir(パス):ディレクトリやファイルの情報をイテレータで生成
『scandir()』はディレクトリやファイルに関する情報を『os.DirEntry』オブジェクトで返すイテレータを生成する関数です。引数には情報を取得したいディレクトリパスを指定します。
『os.DirEntry』オブジェクトからは様々な情報を取得することができます。
import os
root_path = '.'
for file in os.scandir(root_path):
print(file)
print(file.name)
print(file.path)
出力結果
<DirEntry 'dir2'>
dir2
./dir2
<DirEntry 'dir3'>
dir3
./dir3
<DirEntry 'dir1'>
dir1
./dir1
<DirEntry 'main.py'>
main.py
./main.py
system(Linuxコマンド):Linuxコマンドを実行
『system()』はLinuxコマンドをPython内で実行する関数です。引数には実行したいLinuxコマンドを指定します。
『ls -la』はディレクトリやファイルの情報を取得するLinuxコマンドです。
import os
print(os.system('ls -la'))
出力結果
total 64
drwxr-xr-x 6 xx staff 192 12 3 09:52 .
drwxr-xr-x 8 xx staff 256 12 2 10:29 ..
drwxr-xr-x 6 xx staff 192 12 3 09:52 dir1
drwxr-xr-x 5 xx staff 160 12 2 10:31 dir2
drwxr-xr-x 5 xx staff 160 12 2 10:31 dir3
-rw-r--r--@ 1 xx staff 29471 12 3 12:13 main.py
0
walk(パス):ディレクトリやファイルの情報をイテレータで生成
『walk()』は引数に指定したパスのディレクトリ以下のディレクトリやファイルをトップダウンに走査しタプル(ディレクトリパス, ディレクトリ名, ファイル名)オブジェクトで返すジェネレータを生成する関数です。
- タプルオブジェクト(ディレクトリパス, ディレクトリ名, ファイル名)
引数には情報を取得したいディレクトリパスを指定します。
import os
root_path = '.'
for root, dirs, files in os.walk(root_path):
print(root)
for file in files:
print('┗ ', file)
出力結果
.
┗ main.py
./dir2
┗ file2.txt
┗ file3.txt
┗ file1.txt
./dir3
┗ file2.txt
┗ file3.txt
┗ file1.txt
./dir1
┗ file2.txt
┗ file3.txt
┗ file1.txt
./dir1/dir1-1
┗ file2.txt
┗ file3.txt
┗ file1.txt
path.join(パス):パス情報を結合
『path.join()』は『path』が持つメソッドの1つ。引数に指定したパスやファイル名を結合してパスを生成するメソッドです。引数には結合したいパスやファイル名を指定します。
import os
root_path = '.'
for root, dirs, files in os.walk(root_path):
for file in files:
print(os.path.join(root, file))
出力結果
./main.py
./dir2/file2.txt
./dir2/file3.txt
./dir2/file1.txt
./dir3/file2.txt
./dir3/file3.txt
./dir3/file1.txt
./dir1/file2.txt
./dir1/file3.txt
./dir1/file1.txt
./dir1/dir1-1/file2.txt
./dir1/dir1-1/file3.txt
./dir1/dir1-1/file1.txt
結合場所には自動的に『/』を追加します。
import os
print(os.path.join('./dir1', 'dir1-1', 'file1.txt'))
出力結果
./dir1/dir1-1/file1.txt
今日のdot
今回はPythonの組み込みモジュール『os』モジュールについて解説しました。利用頻度の高いものを中心に解説しましたが『os』モジュールはこれ以外にも数多くの関数を持っています。その中にはファイルの作成等に関する関数も持っていますが、通常は組み込み関数の『open』を利用するためこちらは利用しません。
【フリーランス向けの完全無料Pythonプログラミング講座】
dot blogではこの記事以外にも完全無料でフリーランス向けのPythonプログラミング講座を公開中です。フリーランスとして活躍し稼ぐための強力な武器となりますよ。
Python入門講座【無料のプログラミング学習講座】
最近特に注目度が高くなってきているプログラミング言語Python。転職、フリーランス、独立・起業を検討中、日々の業務が忙しい社会人等は今こそ身に付けておきたいスキルの1つ。初心者向けにやさしいプログラミング学習内容のPython入門講座を無料で公開。