Pythonによるファイル操作

Pythonは初心者が学ぶのに最適なプログラミング言語の1つであるというのは、不文律のコンセンサスです。Pythonは非常に汎用性が高く、読みやすく、分析しやすく、見た目も美しい言語です。Pythonプログラミング言語は拡張性が高く、様々な理由で使用したいツールやユーティリティを構築するための最高のツールボックスの1つとして広く認識されています。

この記事では、Pythonがオペレーティングシステムの最も重要なコンポーネントの1つであるファイルとディレクトリをどのように処理するかについて簡単に説明します。幸いなことに、Pythonにはフラットファイルやテキストファイルを作成したり操作したりするための関数が組み込まれています。また、ioモジュールはファイルにアクセスするためのデフォルトのモジュールなので、一般的なIO操作のために外部ライブラリをインポートする必要はありません。

Pythonでファイルを扱うために使われる主な関数は以下の通りです。open(),close(),read(),write(),append()`.

Open()`によるファイルのオープン

この関数は、ファイルからの読み込みとファイルへの書き込みに使用する “handle” と呼ばれるファイルオブジェクトを返します。この関数が受け取ることのできる引数は以下の通りである。

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


通常、filenamemode パラメータだけが必要で、他のパラメータはデフォルト値で暗黙のうちに設定されて使用されます。

以下のコードでは、この関数をどのように使用するかを示しています。

file_example = open ("TestingText.txt")


これは “TestingText” という名前のテキストファイルをリードオンリーで開きます。これはopen関数のデフォルトのモードがreadモードであることに起因しています。

open()` 関数で利用可能なアクセスモードは以下のとおりです。

  • r: ファイルを読み込み専用モードで開きます。ファイルの先頭から読み込みを開始し、open()関数のデフォルトモードとなります。
  • rb: バイナリ形式でファイルを読み込み専用でオープンし、ファイルの先頭から読み込みを開始します。バイナリ形式はさまざまな用途に使用できますが、通常はイメージやビデオなどを扱うときに使用されます。
  • r+: ファイルの読み書きのためにファイルを開き、ポインタをファイルの先頭に置きます。
  • w: 書き込み専用モードで開く。ポインタはファイルの先頭に置かれ、同じ名前の既存のファイルは上書きされます。同じ名前のファイルが存在しない場合は、新しいファイルを作成します。
  • wb: バイナリモードで書き込み専用のファイルを開きます。
  • w+: 書き込みと読み込みが可能なファイルをオープンします。
  • wb+: バイナリモードで書き込み、読み出し可能なファイルを開きます。
  • a: 新しい情報を追加するためにファイルをオープンする。ポインタはファイルの末尾に置かれる。同じ名前のファイルが存在しない場合は、新しいファイルが作成されます。
  • ab: バイナリモードで追記するためのファイルを開きます。
  • a+: a+`: ファイルをオープンし、追記と読み込みの両方を行う。
  • ab+: バイナリモードで、追記と読み込みの両方を行うファイルをオープンする。

実行中のPythonファイルと読み込み対象のファイルが同じディレクトリに存在しない場合、以下のコードに示すように、open()関数に読み込み対象のファイルのフルパスを渡す必要があります。

file_example = open ("F:DirectoryAnotherDirectorytestsTestingText.txt")


注意: 注意すべき点は、与えられたファイル名とパスの両方が正しいことを常に確認することです。もし、どちらかが間違っていたり、存在しなかったりすると、 FileNotFoundError というエラーが投げられますので、プログラムがクラッシュしないように、それをキャッチして処理する必要があります。

この問題を避けるために、ベストプラクティスとして、以下のように try-finally ブロックでエラーをキャッチして例外を処理することができます。

try:
    file_example = open ("F:DirectoryAnotherDirectorytestsTestingText.txt")
except IOError:
    print("An error was found. Either path is incorrect or file doesn't exist!")


finally:
    print("Terminating process!")


read() によるファイルからの読み込み

Python には、ファイルを読み込むための関数が 3 つあります。read()readline()readlines()`です。最後の2つの関数は、特定の種類のファイルを読みやすくするための単なるヘルパー関数です。

これから使う例では、”TestingText.txt “には次のようなテキストが含まれています。

Hello, world! Python is the way to coding awesomeness.


If you don't believe me, try it on your own.


Come, you will enjoy the Dark Side. We have cookies!


readメソッドは,次のように使う。

file_example = open ("F:DirectoryAnotherDirectorytestsTestingText.txt", "r")


print(file_example.read())


出力は次のようになります。

Hello, world! Python is the way to coding awesomeness.


If you don't believe me, try it on your own.


Come, you will enjoy the Dark Side. We have cookies!


Note: read 関数を使うと、特殊文字が正しく読み込まれないことがある。特殊文字を正しく読み込むには、以下のように read() 関数に encoding パラメータを渡して、その値を utf8 に設定すればよい。

file_example = open ("F:DirectoryAnotherDirectorytestsTestingText.txt", "r", encoding="utf8" )


また、関数 read() やヘルパー関数 readline() は、ファイルから読み込むバイト数を決定する数値をパラメータとして受け取ることができます。テキストファイルの場合、これは返される文字数になります。

file_example = open ("F:DirectoryAnotherDirectorytestsTestingText.txt", "r")


print(file_example.read(8))


出力は以下のようになる。

Hello, w


ヘルパー関数 readline() も同じように動作しますが、テキスト全体を返すのではなく、1行を返します。

file_example = open ("F:DirectoryAnotherDirectorytestsTestingText.txt", "r")


print(file_example.readline())
print(file_example.readline(5))


上のスクリプトでは、最初の print() 文は最初の行を返し、出力コンソールに空白行を挿入します。次の print() 文は前の行と空白行で区切られ、出力に示されるように新しい行から始まります。

Hello world! Python is the way to coding awesomeness.


If yo


最後に、ヘルパー関数 readlines() がすべてのテキストを読み込んで、読みやすいように行単位に分割します。次の例を見てください。

print(file_example.readlines())


このコードからの出力は次のようになります。

Hello world! Python is the way to coding awesomeness. If you don't believe me, try it on your own. Come, you will enjoy the Dark Side. We have cookies!


readlines()関数はread()` 関数よりもずっと遅く、非効率的であり、あまり利点がないことを覚えておいてください。これに対する良い代替案は、よりスムーズで高速に機能するループを使用することです。

file_example = open ("F:DirectoryAnotherDirectorytestsTestingText.txt", "r")


for lines in file_example:
    print(lines)


もし、その行が表示されなかったら、次のステートメントによってバッファの中で置き換えられることに注意してください。

write() によるファイルへの書き込み

この関数を使用すると、同じ名前のファイル内の情報はすべて上書きされます。その動作は read() 関数と似ていますが、情報を読み取るのではなく、情報を挿入します。

file_example2 = open ("F:DirectoryAnotherDirectorytestsTestingTextTwo.txt", "w")


file_example2.write("This is a test. Enjoy it!
") #'
' is for change line.


file_example2.write("Another thing to know is doing it slowly.
")


file_example2.write("One by one. Yay!")


複数の行を書き込む必要がある場合には、代わりに writelines() サブ関数を使用することができます。

listOfThingsToSay = ["I like things like: 
", "Ice Cream
", "Fruits
", "Movies
", "Anime
", "Naps
", "Jerky
"]


file_example2 = open ("F:DirectoryAnotherDirectorytestsTestingTextTwo.txt", "w")


file_example2.writelines(listOfThingsToSay)


注意: print() 関数を使用するためには、モードを w+ に設定する必要があります。

append()によるファイルへの追加

この関数は write() 関数と似たような働きをしますが、ファイルを上書きするのではなく、 append() 関数は既存のファイルに内容を追加します。

TestingTextThree “という名前のテキストファイルに、次のような内容が書かれていたとします。

Some essential things are missing in life and should not be avoided.


新しいテキストを追加するためには、以下のようなコードを使用します。

listOfThingsDo = ["You need at least to: 
", "Eat fried Ice Cream
", "Go to Disney
", "Travel to the moon
", "Cook Pineapple Pizza
", "Dance Salsa
"]


file_example3 = open ("F:DirectoryAnotherDirectorytestsTestingTextThree.txt", "a+")


file_example3.writelines(listOfThingsToDo)


for newline in file_example3
    print(newlines)


出力は次のようになる.

Some essential things are missing in life and should not be avoided.


You need at least to:


Eat fried Ice Cream


Go to Disney


Travel to the moon


Cook Pineapple Pizza


Dance Salsa


close() で開いているファイルを閉じる

close()`関数は、メモリバッファをクリアしてファイルをクローズします。これは,そのファイルからの読み出しができなくなることを意味し,再び読み出したい場合には,再びファイルを開かなければなりません.また、Windowsなど一部のOSでは、オープンしたファイルをロックされたものとして扱いますので、コード内で後始末をすることが重要です。

前回使用したサンプルコードを使って、この関数を次のように使用します。

file_example = open ("F:DirectoryAnotherDirectorytestsTestingText.txt", "r")


print(file_example.read())


file_example.close()


結論

Pythonは最も堅牢なプログラミング言語の一つであり、また最も使用されている言語の一つでもあります。実装だけでなく解析も簡単なので、プログラミング初心者に最適なツールです。さらに、その汎用性の高さから、プログラミング初心者のスタート地点としても最適です。

ファイル操作に関しても、Pythonはレスポンスが早く使いやすい関数と、比較的弾力的なエラー処理方法を備えているので、ファイルを扱う際の開発・デバッグ工程は他の言語よりもずっと苦痛が少ないです。

タイトルとURLをコピーしました