テンポラリーディレクトリを作成する mkdtemp
テンポラリーディレクトリを作成するには、tempfileモジュールのmkdtempメソッドを利用します。以下が構文です。
テンプレートディレクトリを作成します。ディレクトリを作成したユーザIDによってのみ読み書きができます。このメソッドは、テンポラリーディレクトリを削除しないので、自分で削除する必要があります。
オプションのsuffixは、作成されるディレクトリの接辞文字列です。オプションのprefixは接頭文字列です。オプションのdirが指定された場合は、テンポラリーディレクトリは指定したディレクトリに作成されます。指定しなければシステムのデフォルトディレクトリに作成されます。
このメソッドは、作成されたディレクトリの絶対パスを返します。
以下が実際のコードです。
以下が実行結果です。
- tempfile.mkdtemp([suffix=''[, prefix='tmp'[, dir=None]]])
オプションのsuffixは、作成されるディレクトリの接辞文字列です。オプションのprefixは接頭文字列です。オプションのdirが指定された場合は、テンポラリーディレクトリは指定したディレクトリに作成されます。指定しなければシステムのデフォルトディレクトリに作成されます。
このメソッドは、作成されたディレクトリの絶対パスを返します。
以下が実際のコードです。
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import tempfile,os
- #テンポラリーディレクトリを作成します。
- temp_dir = tempfile.mkdtemp()
- #テンポラリーディレクトリーの名前を表示します。
- print u'テンポラリーディレクトリー名:', temp_dir
- #テンポラリーディレクトリが作成される親ディレクトリ名を表示します。
- print u'テンポラリーディレクトリー名:', tempfile.gettempdir()
- #テンポラリーディレクトリは自分で削除する必要があります。
- print u'ディレクトリは存在する?(削除前):', os.path.exists(temp_dir)
- # テンポラリーディレクトリを削除します。
- os.removedirs(temp_dir)
- print u'ディレクトリは存在する?(削除後):', os.path.exists(temp_dir)
- >>>
- テンポラリーディレクトリー名: c:\users\python\appdata\local\temp\tmpjwgclo
- テンポラリーディレクトリー名: c:\users\python\appdata\local\temp
- ディレクトリは存在する?(削除前): True
- ディレクトリは存在する?(削除後): False
ディレクトリを作成する。 mkdir makedirs
ディレクトリを作成するには、osモジュールのmkdirメソッドを利用します。構文は以下の通りです。
pathで指定したディレクトリを作成します。modeは作成されるディレクトリの権限です。指定しなければ777となります。権限設定がないシステムでは無視されます。すでにディレクトリが存在している場合は、OSError例外が発生します。ただし、親ディレクトリが存在しない場合もOSError例外が発生します。makedirsメソッドを利用すれば親ディレクトリが存在しなくても再帰的にディレクトリを作成します。
以下が構文です。
指定したpathを再帰的に作成します。すでにディレクトリがすべて存在する場合は、OSErrorが発生します。オプションのmodeはmkdirメソッドと同様です。
以下が実際のコードです。
以下が実行結果です。
- os.mkdir(path[, mode])
以下が構文です。
- os.makedirs(path[, mode])
以下が実際のコードです。
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import os
- dir_name1 = 'test'
- dir_name2 = 'test1\\test'
- #ディレクトリを作成します。
- os.mkdir(dir_name1)
- #もう一度作成するとエラーになります。
- os.mkdir(dir_name1)
- #親ディレクトリが存在しなくてもエラーになります。
- os.mkdir(dir_name2)
- #makedirsメソッドを利用すれば親ディレクトリが存在しなくても作成できます。
- os.makedirs(dir_name2)
- >>>
- Traceback (most recent call last): #すでに存在するディレクトリを指定した時のエラー
- File "D:\test.py", line 13, in <module>
- os.mkdir(dir_name1)
- WindowsError: [Error 183] 既に存在するファイルを作成することはできません。: 'test'
- Traceback (most recent call last): #親ディレクトリが存在しなかった時のエラー
- File "D:\test.py", line 16, in <module>
- os.mkdir(dir_name2)
- WindowsError: [Error 3] 指定されたパスが見つかりません。: 'test1\\test'
ファイルまたはディレクトリを削除する。 remove rmdir rmtree
ファイルを削除するには、osモジュールのremoveメソッドを利用します。構文は、以下の通りです。
指定したpathのファイルを削除します。pathがディレクトリであった場合は、OSError例外が発生します。ディレクトリを削除する場合は、後述するrmdirメソッドを利用します。構文は以下の通りです。
指定したpathのディレクトリを削除します。削除されるのはディレクトリが空の時のみです。空でないディレクトリを削除する場合は、後述のshutilモジュールのrmtreeメソッドを利用します。構文は以下の通りです。
指定したpathのディレクトリを削除します。ディレクトリが空でなくても削除します。オプションのignore_errorsがTrueの時は、エラーが発生しても無視されます。Falseまたはオプションを指定しなかった場合は、例外が発生します。オプションのonerrorを指定した場合は、onerrorはfunction,path,excinfoの3つのパラメータを受けて、呼び出せる必要があります。functionは、例外が発生した関数で、os.path.islink(), os.listdir(), os.remove()またはos.rmdir()であると思われます。pathはfunctionに渡されたパスです。excinfoは、sys.exc_info()によって返される例外です。onerrorで発生した例外はキャッチできません。
以下が実際のコードです。
以下が実行結果です。
- os.remove(path)
- os.rmdir(path)
- shutil.rmtree(path[, ignore_errors[, onerror]])
以下が実際のコードです。
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import os,shutil
- file_name1 = 'test1.py' #存在するファイル
- file_name2 = 'test2.py' #存在するファイル
- dir_name1 = 'test_dir1' #存在するディレクトリ
- dir_name2 = 'test_dir2' #存在するディレクトリ ディレクトリ内にファイルが存在します。
- #存在するファイルをremoveメソッドで削除します。
- os.remove(file_name1)
- #存在するディレクトリをremoveメソッドで削除します。エラーが出ます。
- os.remove(dir_name)
- #存在するファイルをrmdirメソッドで削除します。 エラーが出ます。
- os.rmdir(file_name2)
- #存在するディレクトリをrmdirメソッドで削除します。
- os.rmdir(dir_name1)
- #ファイルが入っているディレクトリをrmdirメソッドで削除します。 エラーが出ます。
- os.rmdir(dir_name2)
- #ファイルが入っているディレクトリをrmtreeメソッドを削除します。
- shutil.rmtree(dir_name2)
- >>>
- Traceback (most recent call last):
- File "D:/test.py", line 15, in <module>
- os.remove(dir_name)
- NameError: name 'dir_name' is not defined
- Traceback (most recent call last):
- File "D:/test.py", line 18, in <module>
- os.rmdir(file_name2)
- WindowsError: [Error 267] ディレクトリ名が無効です。: 'test2.py'
- Traceback (most recent call last):
- File "D:/test.py", line 24, in <module>
- os.rmdir(dir_name2)
- WindowsError: [Error 145] ディレクトリが空ではありません。: 'test_dir2'
ファイル名を変更する os.rename
osモジュールのrenameメソッドを利用すると、指定したファイルのファイル名を変更できます。構文は、以下の通りです。
ファイル名やディレクトリ名を指定したsrcからdstにリネームします。もしdstがすでに存在するディレクトリであった場合OSError例外が発生します。dstがすでに存在するファイルの場合は、OSによって挙動が異なります。Unixの場合は、権限があればエラーを出さずに上書きしてしまいます。Windowsの場合は、OSError例外が発生します。
以下に実際のコードを記載します。
以下が実際のコードです。
- os.rename(src, dst)
以下に実際のコードを記載します。
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import os
- src = 'test1.py'
- dst1 = 'test2.py' #存在しないファイル
- dst2 = 'test3.py' #存在するファイル
- #普通に名前を変えます。
- print os.access(src , os.F_OK),os.access(dst1 , os.F_OK)
- os.rename(src , dst1)
- print os.access(src , os.F_OK),os.access(dst1 , os.F_OK)
- #すでに存在するファイルにリネームします。
- os.rename(dst1 , dst2)
- >>>
- True False
- False True
- Traceback (most recent call last):
- File "D:/test.py", line 16, in <module>
- os.rename(dst1 , dst2)
- WindowsError: [Error 183] 既に存在するファイルを作成することはできません。
ファイルの読み込み、書き換えの可否を判定する access
osモジュールのaccessメソッドを使用すると、指定したファイルが読み込めるか書き換えができるか実行できるかを判定できます。構文は、以下の通りです。
pathに指定したファイルやディレクトリに特定のアクセスができるかどうかのテストを行います。modeには、modeには、以下を指定できます。
F_OK:ファイルやディレクトリが存在するかどうか
R_OK:ファイルやディレクトリが読み込み可能かどうか
W_OK:ファイルやディレクトリが書き込み可能かどうか
X_OK:ファイルやディレクトリが実行可能かどうか
以下に実際のコードを示します。
以下が実際のコードです。(Windows環境なので、すべてTrueになってしまいます。
- os.access(path, mode)
F_OK:ファイルやディレクトリが存在するかどうか
R_OK:ファイルやディレクトリが読み込み可能かどうか
W_OK:ファイルやディレクトリが書き込み可能かどうか
X_OK:ファイルやディレクトリが実行可能かどうか
以下に実際のコードを示します。
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import os
- path = 'C:\Windows\System32\drivers\etc\hosts'
- #ファイルが存在するかどうかチェックします。
- print os.access(path,os.F_OK)
- #ファイルが読み込み可能かどうかチェックします。
- print os.access(path,os.R_OK)
- #ファイルが書き込み可能かどうかチェックします。
- print os.access(path,os.W_OK)
- #ファイルが実行可能かどうかチェックします。
- print os.access(path,os.X_OK)
- >>>
- True
- True
- True
- True