Pythonでディレクトリやファイルの操作を行う【os】モジュールのイメージ画像

Pythonでディレクトリやファイルの操作を行う【os】モジュール

  • 公開日:2018/12/03
  • 更新日:2019/01/29
  • 投稿者:n bit

Pythonの組み込みモジュール『os』モジュールを使って通常OS側で行うようなファイルやディレクトリに関する操作方法の解説。ファイルやディレクトリの移動、一覧の取得等を学習します。

  • Python

この記事は約 分で読めます。(文字)

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』を利用するためこちらは利用しません。