【Python】テキストファイルを読み書きモードで、新規作成して、排他的に開く(モードx+, x+t)【入門第66回】

196, 2019-09-25

目次

読み書きモードでかつ新規作成してかつ排他的に

こんにちは、narupoです。

テキストファイルを読み書きモードでかつ、新規作成してかつ、排他的に開くにはopen関数のmode引数にx+またはx+tを指定します。
このモードのopen関数で得られるファイルオブジェクトは_io.TextIOWrapperです。
このファイルオブジェクトのメソッドであるreadwriteなどを使うとファイルを読み書きすることが出来ます。

今回は具体的には↓を見ていきます。

  • 読み書きモードでかつ新規作成してかつ排他的にテキストファイルを開く

  • ファイルオブジェクトのタイプ

  • テキストファイルに文字列を書き込む

  • テキストファイルから文字列を読み込む

ほかのファイル入出力についての入門記事は↓をご覧ください。

読み書きモードでかつ新規作成してかつ排他的にテキストファイルを開く

読み書きモードでかつ新規作成してかつ排他的にテキストファイルを開くにはopen関数を↓のように使います。

with open('animals.txt', mode='x+', encoding='utf-8') as fp:
    pass

open関数の第1引数にはファイルのパスを指定します。
mode引数には文字列x+またはx+tを指定します。
encodingにはテキストファイルのエンコーディングを指定します。

mode引数にx+またはx+tを指定してopen関数でファイルを開く場合、ファイルが存在しない場合はopen関数はファイルを新規作成してファイルを開きます。
ファイルが既に存在する場合はopen関数はFileExistsErrorを送出します。

try:
    with open('animals.txt', mode='x+', encoding='utf-8') as fp:
        pass
except FileExistsError:
    print('ファイルが存在します')

animals.txtがすでに存在する場合、↑のコードの実行結果は↓のようになります。

ファイルが存在します

その他、open関数の詳しい使い方については↓の記事をご覧ください。

ファイルオブジェクトのタイプ

x+またはx+tモードで開いたテキストファイルのファイルオブジェクトのタイプは_io.TextIOWrapperです。

with open('animals.txt', mode='x+', encoding='utf-8') as fp:
    print(type(fp))

↑のコードの実行結果は↓のようになります。

<class '_io.TextIOWrapper'>

このTextIOWrapperTextIOBaseを継承したクラスです。
さらにTextIOBaseIOBaseを継承しています。
TextIOBaseIOBaseの公式ドキュメントを見ればこのファイルオブジェクトで使えるメソッドを一望できます。

テキストファイルに文字列を書き込む

ファイルオブジェクトのメソッドを使うとファイルを読み書き出来ます。
テキストファイルに文字列を書き込むにはwriteメソッドなどを使います。

with open('animals.txt', mode='x+', encoding='utf-8') as fp:
    fp.write('猫\n')

↑のコードを実行すると↓のような内容のanimals.txtが作成されます。

その他の書き込み用のメソッドについては↓の記事をご覧ください。

テキストファイルから文字列を読み込む

テキストファイルから文字列を読み込むにはreadメソッドなどを使います。

with open('animals.txt', mode='w+', encoding='utf-8') as fp:
    content = fp.read()
    print(content)

↑のコードの実行結果は空の文字列です。
x+またはx+tモードはファイルを新規作成して開くので当然ですね。
読み書きモードでの文字列の読み込みの注意事項などについては↓の記事をご覧ください。

おわりに

排他的にテキストファイルを開けば、大切なデータが書かれているファイルをうっかり空にするミスを防止することが出来ます。
また、読み書きモードと併用することでより具体的な条件をファイル操作に追加することが出来ます。

以上、次回に続きます。

また見てね

関連動画





スポンサーリンク

スポンサーリンク

スポンサーリンク

スポンサーリンク