pathlib
Pythonでファイルパスを扱う際、pathlibモジュールを使うと、ファイルパスをオブジェクト指向的に扱うことができます。これは、ファイルパスを文字列で操作するよりもエラーが起きにくく、読みやすくなります。
from pathlib import Path
p = Path('.') # '.' は現在のディレクトリを表します
print(p, type(p)) # オペレーティングシステムに応じて <class 'pathlib.PosixPath'> または <class 'pathlib.WindowsPath'>パスは / 演算子を使って結合できます。例えば、現在のディレクトリにある example.txt というファイルを表すには、次のようにします。
file_path = p / 'example.txt' # 新しいパスを構築します
print(file_path) # example.txt/ 演算子は、オペレーティングシステムに関係なく機能し、正しいパス区切り文字を使用します。実際、この / 演算子は Path クラスの __truediv__() マジックメソッドであり、Path オブジェクトの操作を直感的にしています。
Path オブジェクトから絶対パスを取得するには、absolute() メソッドを使用します。
abs_path = file_path.absolute() # 絶対パスを取得します
print(abs_path) # Unixでは /home/user/example.txt、Windowsでは C:\\user\\example.txt のような絶対パスを表示しますPath クラスには、一般的な操作のための便利なメソッドが多数用意されています。
Path.cwd(): 現在の作業ディレクトリを新しいPathオブジェクトとして返しますPath.home(): ホームディレクトリを新しいPathオブジェクトとして返しますPath.exists(): パスが存在するか確認しますPath.is_file(): パスがファイルかどうか確認しますPath.is_dir(): パスがディレクトリかどうか確認しますPath.mkdir(): パスに新しいディレクトリを作成しますPath.glob(): ディレクトリ内の一致するファイルを生成するジェネレータを返します
これらのメソッドがどのように使われるか見てみましょう。
print(Path.cwd()) # 現在の作業ディレクトリを表示します
print(Path.home()) # ホームディレクトリを表示します
if not file_path.exists(): # ファイルが存在するか確認します
print(f'The file {file_path} does not exist.')
if file_path.is_file(): # それがファイルかどうか確認します
print(f'{file_path} is a file.')
new_dir = p / 'new_dir'
new_dir.mkdir(exist_ok=True) # 新しいディレクトリを作成します。既に存在する場合は何もしません。
for file in p.glob('*.txt'): # 現在のディレクトリ内のすべての .txt ファイルを繰り返し処理します
print(file)p をあなたの Path オブジェクトに、'example.txt' を適切なファイル名に置き換えることを忘れないでください。pathlib モジュールは、Pythonでファイルやディレクトリを操作するための強力なツールです。
チャレンジ: 相対パスを絶対パスに
デジタルアーカイブの普及により、膨大な数の文書の管理がより簡単になりました。しかし、特に相対パスと絶対パスを扱う際、これらの文書へのパスを管理するのは少し厄介なこともあります。あなたはデジタルアーカイブ会社のソフトウェア開発者として働いています。文書の追跡とアクセスを確実にするために、相対パスを絶対パスに変換できるプログラムを作成するのがあなたの任務です。
相対パスが与えられたとき、その対応する絶対パスを出力してください。
入力
入力の唯一の行には、1つの相対パスが含まれます。
入力 | 出力 |
|---|---|
./documents/report.pdf | /tmp/documents/report.pdf |
folder2/file2.txt | /tmp/folder2/file2.txt |
Constraints
Time limit: 2 seconds
Memory limit: 512 MB
Output limit: 1 MB