13,009
回編集
767行目: | 767行目: | ||
oldpath = pathlib.Path('./test/book.txt') | oldpath = pathlib.Path('./test/book.txt') | ||
oldpath.rename(pathlib.Path('./test/address.txt')) # 既にaddress.txtファイルが存在する場合は、例外FileExistsErrorが発生する | oldpath.rename(pathlib.Path('./test/address.txt')) # 既にaddress.txtファイルが存在する場合は、例外FileExistsErrorが発生する | ||
</syntaxhighlight> | |||
<br><br> | |||
== 条件に一致するファイル / ディレクトリの一覧の取得 == | |||
指定した条件に一致するファイルの一覧を取得する場合は、<code>glob</code>モジュールの<code>glob</code>関数を使用する。<br> | |||
<syntaxhighlight lang="python"> | |||
glob.glob(pathname, *, recursive=False) | |||
</syntaxhighlight> | |||
<br> | |||
第1引数に指定したパスとマッチするファイルおよびディレクトリを、リストとして取得する。<br> | |||
この時、パスには以下の特殊文字を指定することができる。<br> | |||
* : 0文字以上の任意の文字 | |||
? : 1文字の任意の文字 | |||
[abc] : 括弧の中のいずれかの文字 | |||
<br> | |||
<code>*</code>は、0文字以上の任意の文字とマッチする。<br> | |||
例えば、*.txtと指定する場合、a.txtやmemo.txt等の"0文字以上の任意の文字列" + ".txt"に一致するファイルおよびディレクトリの一覧を取得する。<br> | |||
<br> | |||
以下の例では、末尾が.jpgのファイルおよびディレクトリの一覧を取得している。<br> | |||
<syntaxhighlight lang="python"> | |||
import glob | |||
for name in glob.glob('./test/*.txt'): | |||
print(name) | |||
# 出力 | |||
./test/a.jpg | |||
./test/cup.jpg | |||
./test/pen.jpg | |||
</syntaxhighlight> | |||
<br> | |||
以下の例では、bから始まるファイルおよびディレクトリの一覧を取得している。<br> | |||
<syntaxhighlight lang="python"> | |||
import glob | |||
for name in glob.glob('./test/b*'): | |||
print(name) | |||
# 出力 | |||
./test/back.txt | |||
./test/book.png | |||
</syntaxhighlight> | |||
<br> | |||
<code>?</code>は、1文字の任意の文字とマッチする。<br> | |||
例えば、?.txtと指定する場合、a.txtやc.txt等の"1文字の任意の文字" + ".txt"と一致するファイルやディレクトリの一覧を取得する。<br> | |||
2文字以上のabc.txt等にはマッチしない。<br> | |||
<br> | |||
以下の例では、3文字の任意の文字で始まり、末尾が.txtのファイルおよびディレクトリの一覧を取得している。<br> | |||
<syntaxhighlight lang="python"> | |||
import glob | |||
for name in glob.glob('./test/???.txt'): | |||
print(name) | |||
# 出力 | |||
./test/cup.txt | |||
./test/pen.txt | |||
</syntaxhighlight> | |||
<br> | |||
<code>[]</code>は、括弧の中に記述した文字のいずれか1文字とマッチする。<br> | |||
例えば、199[789].txtと指定する場合、1997.txt、1998.txt、1999.txtと一致するファイルやディレクトリの一覧を取得する。<br> | |||
1文字ではない19978.txt等にはマッチしない。<br> | |||
<br> | |||
また、[3-6]や[a-e]等のようにハイフンを記述することにより、文字の範囲を指定することができる。<br> | |||
[3-6]は[3456]と等価、[a-e]は[abcde]と等価である。<br> | |||
<br> | |||
以下の例では、最初にaからeまでの文字で始まり、末尾が.txtのファイルおよびディレクトリの一覧を取得している、<br> | |||
さらに、fからzまでの文字で始まり、末尾が.txtのファイルおよびディレクトリの一覧を取得している。<br> | |||
<syntaxhighlight lang="python"> | |||
import glob | |||
for name in glob.glob('./test/[a-e]*.txt'): | |||
print(name) | |||
for name in glob.glob('./test/[c-z]*.txt'): | |||
print(name) | |||
# 出力 | |||
./test/book.txt | |||
./test/environment.txt | |||
./test/flavor.txt | |||
./test/pen.txt | |||
</syntaxhighlight> | |||
<br> | |||
<code>glob</code>関数において、特殊文字である<code>*</code>、<code>?</code>、<code>[]</code>をを単なる文字として扱う場合は、<code>[]</code>で囲んで記述する。<br> | |||
例えば、?を文字として扱う場合は、[?]と記述する。<br> | |||
<syntaxhighlight lang="python"> | |||
import glob | |||
for name in glob.glob('./test/*[?]*.txt'): | |||
print(name) | |||
# 出力 | |||
./test/ab?cd.txt | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> |