「Pythonの基礎 - ファイル」の版間の差分

ナビゲーションに移動 検索に移動
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>

案内メニュー