Articles

Pythonでのファイルへのリストの読み書き

シリアル化されたデータ構造として、Pythonプログラマは配列、リスト、辞書を集中的に使用します。 これらのデータ構造を永続的に格納するには、ファイルまたはデータベースのいずれかを使用する必要があります。 この記事では、リストをファイルに書き込む方法と、そのリストをメモリに読み込む方法について説明します。

ファイルにデータを書き込み、ファイルからデータを読み取るために、Pythonプログラミング言語は、単一の行を扱うための標準的なメソッドwrite()read()writelines()readlines()picklejsonモジュールの両方で、シリアル化されたデータセットを扱う巧妙な方法も可能にします。

読み取りと書き込みメソッドを使用して

文字(文字列)を扱うために、基本的なメソッドは優れています。 このようなリストを1行ずつファイルに保存するlistfile.txtは、次のように行うことができます。

# define list of placesplaces = with open('listfile.txt', 'w') as filehandle: for listitem in places: filehandle.write('%s\n' % listitem)

6行目でlistitemは、最初に改行”\n”で拡張され、次に出力ファイルに格納されます。 ファイルlistfileからリスト全体を読み取る。このPythonコードは、どのように動作するかを示しています。

# define an empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: for line in filehandle: # remove linebreak which is the last character of the string currentPlace = line # add item to the list places.append(currentPlace)

文字列の最後から改行を削除する必要があることに注意し この場合、Pythonが文字列のリスト操作も可能にするのに役立ちます。 上記のコードの8行目では、この削除は文字列自体のリスト操作として単純に行われ、最後の要素以外のすべてが保持されます。 この要素には、UNIX/Linuxシステムの改行を表す文字”\n”が含まれています。

writelinesメソッドとreadlinesメソッドの使用

この記事の冒頭で述べたように、Pythonにはwritelines()readlines()の二つのメソッドも含まれています。 リスト全体をディスク上のファイルに書き込むには、Pythonコードは次のようになります:

# define list of placesplaces_list = with open('listfile.txt', 'w') as filehandle: filehandle.writelines("%s\n" % place for place in places_list)

ディスク上のファイルからリスト全体を読み取るには、Pythonコードは次のとおりです。

# define empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: filecontents = filehandle.readlines() for line in filecontents: # remove linebreak which is the last character of the string current_place = line # add item to the list places.append(current_place)

上記のリストは、他のプログ よりPythonicな方法で書くには、以下のコードを見てください。

# define empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: places = 

ファイルを開いたlistfile.txtreadlines()forrstrip()メソッドを使用して改行文字が削除されます。 第三に、文字列は新しいリスト項目として場所のリストに追加されます。 コードの前のリストと比較して、はるかにコンパクトですが、初心者のPythonプログラマのために読むことがより困難な場合があります。

pickleモジュールを使用する

これまでに説明したさまざまな方法は、人間がまだそれを読むことができる方法でリストを格納します。 これが必要ない場合は、pickleモジュールが非常に便利になるかもしれません。 そのdump()listfile.dataがバイナリ書き込み(”wb”)用に開かれます。 次に、9行目の
リストは、dump()メソッドを使用して開かれたファイルに格納されます。p>

# load additional moduleimport pickle# define a list of placesplacesList = with open('listfile.data', 'wb') as filehandle: # store the data as binary data stream pickle.dump(placesList, filehandle)

次のステップとして、次のようにファイルからリストを読み取ります。 まず、出力ファイルlistfile.dataは、4行目の読み取り(”rb”)のためにバイナリで開かれます。 次に、場所のリストは、load()メソッドを使用してファイルからロードされます。

# load additional moduleimport picklewith open('listfile.data', 'rb') as filehandle: # read the data as binary data stream placesList = pickle.load(filehandle)

ここでの二つの例は、文字列の使用法を示しています。 ただし、pickleは、文字列、数値、自己定義構造、Pythonが提供する他のすべての組み込みデータ構造など、あらゆる種類のPythonオブジェクトで動作

JSON形式の使用

バイナリデータ形式pickle使用するのはPython固有のものです。 異なるプログラム間の相互運用性を向上させるために、JavaScript Object Notation(JSON)は、使いやすく人間が読めるスキーマを提供するため、非常に人気がありました。次の例は、jsonモジュールを使用して混合変数タイプのリストを出力ファイルに書き込む方法を示しています。 4行目では、基本リストが定義されています。 出力ファイルを7行目に書き込むために開いたdump()メソッドは、JSON表記を使用して基本リストをファイルに格納します。

import json# define list with valuesbasicList = # open output file for writingwith open('listfile.txt', 'w') as filehandle: json.dump(basicList, filehandle)

出力ファイルの内容をメモリに読み込むのは、データを書き込むのと同じくらい簡単です。 dump()load()という名前で、次のように動作します。

import json# open output file for readingwith open('listfile.txt', 'r') as filehandle: basicList = json.load(filehandle)

結論

上に示したさまざまなメソッドは、単純なデータの書き込み/読み取りから、pickleとJSONを使用したバイナリストリーム経由のデータのダンプ/ロードまでの範囲です。 これにより、リストを永続的に保存し、それをメモリに読み戻すことが簡単になります。

謝辞

著者は記事を準備している間、彼女のサポートのためにZoleka Hatitongweに感謝したいと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です