Python でのファイルへのリストの読み取りと書き込み

概要

Python プログラマーは、配列、リスト、辞書をシリアル化されたデータ構造として集中的に使用します。 これらのデータ構造を永続的に保存するには、ファイルまたはデータベースが適切に機能する必要があります。

この記事では、リストをファイルに書き込む方法と、そのリストをメモリに読み込む方法を見ていきます。

ファイルにデータを書き込む、とに ファイルからデータを読み取る、Python プログラミング言語は標準的なメソッドを提供します write() & read() 単一の行を処理するためだけでなく、 writelines() & readlines() 複数の行を処理するため。 さらに、両方の picklejson モジュールを使用すると、シリアル化されたデータ セットを巧妙に処理することもできます。

使い方 読んだ() & 書く() メソッド

文字(文字列)を扱うのが基本 read() & write() メソッドはうまく機能します。 このようなリストを XNUMX 行ずつファイルに保存する listfile.txt 次のように行うことができます:


places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    for listitem in places:
        filehandle.write(f'{listitem}n')

  listitem 改行によって拡張されます "n"、最初に出力ファイルに保存されます。 ここで、ファイルからリスト全体を読み取る方法を見てみましょう。 listfile.txt 記憶に戻る:


places = []


with open('listfile.txt', 'r') as filehandle:
    for line in filehandle:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

文字列の末尾から改行を削除する必要があることに注意してください。 この場合、Python では文字列に対するリスト操作も許可されていることが役に立ちます。 この削除は、文字列自体のリスト操作として単純に行われ、最後の要素以外はすべて保持されます。 この要素には文字が含まれています "n" UNIX/Linux システムの改行を表します。

使い方 writelines() & readlines() メソッド

この記事の冒頭で述べたように、Python には XNUMX つのメソッドも含まれています。 writelines() & readlines() – それぞれ XNUMX ステップで複数行の書き込みと読み取りを行う。 リスト全体をディスク上のファイルに書き込んでみましょう:


places_list = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    filehandle.writelines(f"{place for place in places_list}n")

ディスク上のファイルからリスト全体を読み取るには、次のことが必要です。


places = []


with open('listfile.txt', 'r') as filehandle:
    filecontents = filehandle.readlines()
    for line in filecontents:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

上記のコードは、他のプログラミング言語から借用した、より伝統的なアプローチに従っています。 もっと書いてみよう パイソン的 方法:


places = []


with open('listfile.txt', 'r') as filehandle:
    places = [current_place.rstrip() for current_place in filehandle.readlines()]

まず、ファイルの内容が次の方法で読み取られます。 readlines(). 第二に、 for を使用して各行から改行文字が削除されます。 rstrip() 方法。 XNUMX 番目に、文字列が新しいリスト項目として場所のリストに追加されます。

前のリストと比較すると、コードははるかにコンパクトですが、初心者の Python プログラマーには読みにくいかもしれません。

Joblib モジュールの使用

これまでに説明した最初の方法では、リストを人間が読み取ることができる方法で保存します。文字通り、ファイル内の連続したリストです。 これは、単純なレポートを作成したり、CSV ファイルなど、ユーザーがさらに使用できるようにエクスポート ファイルを出力したりするのに最適です。 ただし、後でロードできるようにリストをファイルにシリアル化するだけの場合は、人間が読める形式で保存する必要はありません。

  joblib モジュールは、Python オブジェクトをダンプする最も簡単な方法を提供します (実際には任意のオブジェクトである可能性があります)。

import joblib

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

joblib.dump(places, 'places.sav')

places = joblib.load('places.sav')
print(places) 

joblib オブジェクトを効率的な形式でシリアル化し、後でロードするための最も単純でクリーンな方法のままです。 次のような任意の形式を使用できます。 .sav, .dataなど。どちらも重要ではありません。 joblib および次のような代替手段 pickle ファイルを問題なく読み取ります。

使い方 ピクルス モジュール

の代替として joblib、使用できます pickle! その dump() メソッドは、リストをバイナリ データ ストリームとして効率的に格納します。 まず、出力ファイル listfile.data バイナリ書き込み用に開かれます ("wb")。 次に、リストは、開いているファイルに保存されます。 dump() 方法:

import pickle

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.data', 'wb') as filehandle:
    
    pickle.dump(places, filehandle)

次のステップとして、次のようにファイルからリストを読み取ります。 まず、出力ファイル listfile.data 読み取り用にバイナリで開かれます ("rb")。 次に、場所のリストがファイルから読み込まれます。 load() 方法:

import pickle

with open('listfile.data', 'rb') as filehandle:
    
    placesList = pickle.load(filehandle)

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

JSON 形式の使用

バイナリ データ形式 pickle uses は Python に固有です。 異なるプログラム間の相互運用性を向上させるために、JavaScript Object Notation (JSONの) は使いやすく人間が読めるスキーマを提供するため、ファイルをシリアル化し、API を介してそれらを共有するために非常に人気がありました。

ベストプラクティス、業界で認められた標準、および含まれているチートシートを含む、Gitを学習するための実践的で実用的なガイドを確認してください。 グーグルGitコマンドを停止し、実際に 学ぶ それ!

次の例は、混合変数タイプのリストを出力ファイルに書き込む方法を示しています。 JSON モジュール。 書き込み用に出力ファイルを開くと、 dump() メソッドは、JSON 表記を使用して基本リストをファイルに保存します。

import json


basic_list = [1, "Cape Town", 4.6]


with open('listfile.txt', 'w') as filehandle:
    json.dump(basic_list, filehandle)

出力ファイルの内容をメモリに読み込むのは、データを書き込むのと同じくらい簡単です。 に対応するメソッド dump() という名前 load():

import json


with open('listfile.txt', 'r') as filehandle:
    basic_list = json.load(filehandle)

まとめ

上記で示したさまざまな方法は、単純なデータの書き込み/読み取りから、ピクルと JSON を使用したバイナリ ストリームを介したデータのダンプ/ロードにまで及びます。 これにより、リストを永続的に保存し、メモリに読み戻すことが簡単になります。

タイムスタンプ:

より多くの スタックアバス