CodeGym /コース /Python SELF JA /ディスク上のファイル操作

ディスク上のファイル操作

Python SELF JA
レベル 21 , レッスン 5
使用可能

6.1 ファイル操作

Python は、ファイルやディレクトリを扱うためのたくさんのビルトイン関数やモジュールを提供してるよ。主な操作は、osshutilなどのビルトインモジュールを使って行われるんだ。

ファイルに対する3つの基本操作は:

  • コピー
  • 移動
  • 削除

これらを実行するのに最適なのが shutil モジュールだよ。

ファイルのコピー


import shutil

shutil.copy('source.txt', 'destination.txt')
        

ファイルの移動


import shutil

shutil.move('source.txt', 'destination.txt')
        

ファイルの削除


import os

os.remove('example.txt')
        

簡単でしょ!

6.2 ファイルの存在チェック

よくあるのが、特定のファイルが存在するかどうかを確認したいときじゃないかな。それには os モジュールの exists() メソッドを使うんだ。

ファイルの存在確認


import os

if os.path.exists('example.txt'):
    print("ファイルは存在します")
else:
    print("ファイルは存在しません")
    # もしファイルが存在しないなら、else ブロックで指定されたことをやるよ。
    # 例えば、警告を表示したり、新しいファイルを作ったり、プログラムを終了したり。

        

ファイルが存在しなければ、条件を使って処理したり、例外を投げたりできるよ。

6.3 オブジェクトのタイプ確認: ファイルかディレクトリか

オブジェクトがファイルかディレクトリかを確認する必要があることがよくあるよね。例えば、ディレクトリの中身をすべて読み込むとき、ファイルは一つずつ処理して、ディレクトリは別の方法で処理するとか。

そのために、オブジェクトがディレクトリであるかを確認するisdir()と、ファイルであるかを確認するisfile()という2つの特別なメソッドがあるんだ。

これはディレクトリかどうかの確認


if os.path.isdir('example_directory'):
    print("これはディレクトリです")
else:
    print("これはディレクトリではありません")
        

これはファイルかどうかの確認


if os.path.isfile('example_file'):
    print("これはファイルです")
else:
    print("これはファイルではありません")
        

これらの関数はとても便利で、予想以上に頻繁に使うことになるよ。 :)

6.4 パスの操作

osモジュールには子モジュールos.pathがあって、ファイルやディレクトリを扱うのに便利な関数がたくさん含まれてるよ。いくつか紹介するね。

ファイル拡張子の取得

splitext() 関数は、ファイル名を2つに分割して、名前と拡張子を要素とするリストを返すよ。


import os.path

# ファイル拡張子の取得
file_path = 'example.txt'
file_extension = os.path.splitext(file_path)[1]
print(f"ファイルの拡張子: {file_extension}")
        

拡張子なしのファイル名の取得


import os.path

# 拡張子なしのファイル名の取得
file_path = 'example.txt'
file_name = os.path.splitext(os.path.basename(file_path))[0]
print(f"拡張子なしのファイル名: {file_name}")
        

パスからファイル名の取得

basename() 関数は、パスを除いてファイル名だけを返すよ。


import os.path

# パスからファイル名の取得
file_path = '/path/to/example.txt'
file_name = os.path.basename(file_path)
print(f"ファイル名: {file_name}")
        

パスからディレクトリの取得

dirname() 関数を使って、ファイル名からディレクトリだけを取得するのも簡単だよ。


import os.path

# パスからディレクトリの取得
file_path = '/path/to/example.txt'
directory = os.path.dirname(file_path)
print(f"ディレクトリ: {directory}")
        

パスの結合

ディレクトリとファイル名が別々になってるなら、それを組み合わせてフルパスを取得することができるよ。


import os.path

# パスの結合
directory = '/path/to'
file_name = 'example.txt'
full_path = os.path.join(directory, file_name)
print(f"フルパス: {full_path}")
        

6.5 プラットフォームに依存しないパス

パスを扱うとき、オペレーティングシステム間の違いに注意することが重要だよ。パスの区切り文字は異なるかもしれないし、一つのプラットフォームで動くコードが他のプラットフォームでは動かないかもしれない。コードを異なるオペレーティングシステム間で移動する際の問題を避けるために、os.path.join()os.path.abspath()os.path.dirname()といった関数を使うことで、異なるプラットフォームに対応できるようにするんだ。

例えば:


import os

# プラットフォームに依存しない方法でのパスの結合
directory = 'some_directory'
file_name = 'example.txt'
full_path = os.path.join(directory, file_name)
print(f"フルパス: {full_path}")
        

絶対パスの取得

現在の作業ディレクトリに対するパスしか持っていないけど、それを絶対パスに変換したい場合は、abspath() 関数を使うといいよ。


import os.path

# 絶対パスの取得
relative_path = 'example.txt'
absolute_path = os.path.abspath(relative_path)
print(f"絶対パス: {absolute_path}")
        

重要! パスを扱うときは、常にシステムの関数を使うようにしよう。あなたのコードは別のオペレーティングシステムで実行されるかもしれないし、そこではファイル区切りが \ じゃなくて / だったり、パスで «:» が使えなかったりするかもだからね。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION