Pythonの基礎 - ファイル

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2021年11月17日 (水) 10:04時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == Pythonでは、ローカルに保存されたファイルからデータを読み込んだり、ファイルへデータを書き込むことができる。<…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

Pythonでは、ローカルに保存されたファイルからデータを読み込んだり、ファイルへデータを書き込むことができる。
また、ディレクトリに含まれるファイルの一覧を取得したり、ディレクトリ名を変更したりすることもできる。


ファイルのオープン / クローズ

ファイルを開く

組み込み関数のopen関数を使用してファイルを開くことができる。

 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)


第1引数は、開くファイル名を指定する。
正常に開くことができる場合、対応するファイルオブジェクトを返す。(ファイルオブジェクトは、第2引数で指定したモードにより異なる)
正常に開くことができない場合、例外OSErrorが送出される。

第2引数は、ファイルを開くモードを指定する。(デフォルトはテキストモード(t)のため、tを明示的に付加する必要はない)
バイナリモード(b)で読み込み権限や書き込み権限を付加する場合、r+bwbと指定する。

  • r
    読み込み用(ファイルが存在しない場合はエラー)
  • r+
    読み込みおよび書き込み用(ファイルが存在しない場合はエラー)
  • w
    書き込み用(ファイルの中身をクリア)
  • w+
    読み込みおよび書き込み用(ファイルの中身をクリア)
  • a
    書き込み用(ファイルの末尾に追加)
  • a+
    読み込みおよび書き込み用(ファイルの末尾に追加)
  • x
    書き込み用(ファイルが存在している場合はエラー)
  • x+
    読み込みおよび書き込み用(ファイルが存在している場合はエラー)
  • b
    バイナリモード
  • t
    テキストモード


第4引数は、使用する文字エンコーディングを指定する。
これは、テキストモードでのみ指定する。

  • ascii
  • cp932
  • euc_jp
  • shift_jis
  • utf-8 (utf_8)


エンコーディングを省略した場合は、現在のプラットフォームのデフォルトエンコーディングが使用される。
自身の環境でのデフォルトエンコーディングを確認するには、以下のソースコードを実行する。

 import locale
 
 locale.getpreferredencoding()


もし、UTF-8を使用して記述されたファイルを読み込む場合、encoding='UTF-8'のように引数に指定する。
なお、開くファイルが存在しない場合は、例外FileNotFoundErrorが発生する。

 f1 = open('myfile.txt', 'r')
 f2 = open('myfile.txt', 'w+')
 f3 = open('myfile.txt', 'r', encoding='UTF-8')
 f4 = open('myfile.txt', 'rb')


正常にファイルが開かれると、ファイルオブジェクトが返る。
ファイルオブジェクトのクラスは、open関数で使用したモードによって異なる。
例えば、テキストモードの場合はio.TextIOWrapper、バイナリモードの読み込みの場合はio.BufferedReader、バイナリモードの書き込みの場合はio.BufferedWriter
バイナリモードの読み書きの場合はio.BufferedRandomとなる。

  • r
    io.TextIOWrapper
  • r+
    io.TextIOWrapper
  • rb
    io.BufferedReader
  • r+b
    io.BufferedRandom
  • w
    io.TextIOWrapper
  • w+
    io.TextIOWrapper
  • wb
    io.BufferedWriter
  • w+b
    io.BufferedRandom
  • a
    io.TextIOWrapper
  • a+
    io.TextIOWrapper
  • ab
    io.BufferedWriter
  • a+b
    io.BufferedRandom
  • x
    io.TextIOWrapper
  • x+
    io.TextIOWrapper
  • xb
    io.BufferedWriter
  • x+b
    io.BufferedRandom


ファイルを閉じる

ファイルの使用後は、close関数を使用してファイルオブジェクトを閉じる。

 f = open('myfile.txt', 'r')
 # 処理1
 # 処理2
 f.close()


他の方法として、with文を使用してファイルを開く場合、使用後は自動的にファイルを閉じることができる。
どちらの方法でも、結果は同じになる。

 with open('myfile.txt', 'r') as f:
 # 処理1
 # 処理2


以下の例では、myfile.txtファイルの内容を読み込み画面に出力した後、ファイルオブジェクトを閉じている。
以下の内容のmyfile.txtファイルを作成する。

# myfile.txtファイル

Hello
World


 f = open('myfile.txt', 'r')
 
 data = f.read()
 print(data)
 
 f.close()