Pythonでテキストファイルをリストに読み込む方法【split()の使い方を解説】
データをファイルに保存しておけば、プログラムが扱っているデータの記録を残せます。これにより、プログラムを実行するたびに同じデータを生成し直す必要がなくなり、ファイルからそのままデータを読み込めるようになります。
ファイルを読み込むには、readlines()メソッドを使用します。ファイルを読み込んだ後、split()を使えば、各行をリストに変換できます。
この記事では、split()メソッドを使ってテキストファイルをリストとして読み込む方法を解説します。具体的なサンプルコードも紹介するので、すぐに実践で役立てられるでしょう。
Pythonでテキストファイルをリストに読み込む基本
まず、grilled_cheese.txtというテキストファイルを用意します。このファイルには、ホットチーズサンドイッチの材料が記録されています。ファイルの中身は次のとおりです。
2 tbsp, ricotta 1 tbsp, grated parmesan 50g, mozzarella 25g, gorgonzola 2, thick slices white bread 1 tbsp, butter
ファイルの1列目には各材料の使用量、2列目には材料名が記載されています。
このファイルを、open()メソッドとreadlines()メソッドを使ってコードに読み込みます。
with open("grilled_cheese.txt", "r") as grilled_cheese:
lines = grilled_cheese.readlines()
print(lines)
このコードでは、「grilled_cheese.txt」というファイルを読み取りモードで開いています。読み取りモードは、open()ステートメント内の「r」という文字で指定します。続いて、読み込んだ行をコンソールに出力しています。
実行結果は以下のとおりです。
['2 tbsp, ricotta\n', '1 tbsp, grated parmesan\n', '50g, mozzarella\n', '25g, gorgonzola\n', '2, thick slices white bread\n', '1 tbsp, butter\n']
コードは、ファイル内の各行を要素とするリストを返しました。しかし、これは期待していた出力とは少し異なります。ファイルをリストとして読み込むこと自体は成功しましたが、各行がそれぞれ独立した文字列として保存されており、材料名とその分量が分離されていません。
split()で値を分割してリストに格納する
この問題を解決するために、split()メソッドを使用します。このメソッドを使うと、指定した区切り文字を基準に文字列を分割できます。
まず、quantities(分量)とingredients(材料)という2つの空のリストを宣言します。このコードはopen()ブロックの一部であるため、インデントを維持することに注意してください。
quantities = [] ingredients = []
次に、リストを反復処理して、ファイルから読み込んだ各行のテキストにアクセスできるようにします。そして、各行を2つの部分に分割します。区切りとなるのは、各行にあるカンマとスペース(「, 」)です。
for l in lines:
as_list = l.split(", ")
quantities.append(as_list[0])
ingredients.append(as_list[1])
forループにより、ファイルを1行ずつ読み込めます。「as_list」の最初の値が材料の分量、2番目の値が材料名です。最後に、両方のリストをコンソールに出力します。
print(quantities) print(ingredients)
コードを実行すると、次のような結果になります。
['2 tbsp, ricotta\n', '1 tbsp, grated parmesan\n', '50g, mozzarella\n', '25g, gorgonzola\n', '2, thick slices white bread\n', '1 tbsp, butter\n'] ['2 tbsp', '1 tbsp', '50g', '25g', '2', '1 tbsp'] ['ricotta\n', 'grated parmesan\n', 'mozzarella\n', 'gorgonzola\n', 'thick slices white bread\n', 'butter\n']
コードは3つのリストをコンソールに出力しました。1つ目はファイル内のすべての行のテキスト、2つ目はファイルから抽出したすべての分量、3つ目はすべての材料名です。
replace()で改行文字を削除する
さらに改善すべき点が1つあります。各材料名の末尾には「\n」という改行文字が付いたままになっています。この文字は、replace()メソッドを使って削除できます。
for l in lines:
as_list = l.split(", ")
quantities.append(as_list[0])
ingredients.append(as_list[1].replace("\n", ""))
このforループでは、「\n」を空文字列に置き換えています。置き換えの対象は、各材料名に対応するas_list[1]の値です。
この変更を加えると、完成版のプログラムは次のようになります。
with open("grilled_cheese.txt", "r") as grilled_cheese:
lines = grilled_cheese.readlines()
quantities = []
ingredients = []
for l in lines:
as_list = l.split(", ")
quantities.append(as_list[0])
ingredients.append(as_list[1].replace("\n", ""))
print(quantities)
print(ingredients)
コードを実行して、結果を確認しましょう。
['2 tbsp', '1 tbsp', '50g', '25g', '2', '1 tbsp'] ['ricotta', 'grated parmesan', 'mozzarella', 'gorgonzola', 'thick slices white bread', 'butter']
コードはテキストファイルを正常に2つのリストへ変換できました。片方のリストにはレシピの材料の分量が、もう片方のリストには使用する材料名が、余計な文字なしにきれいに格納されています。
まとめ
テキストファイルを読み込むには、open()メソッドとreadlines()メソッドを使用します。テキストファイルをリストとして読み込むには、split()メソッドを使いましょう。このメソッドは、指定した文字を基準に文字列をリストへ分割します。
上記の例では、カンマとスペース(「, 」)の位置を基準に文字列をリストへ分割しました。また、replace()メソッドを組み合わせれば、不要な改行文字も簡単に除去できます。これで、あなたもプロのようにPythonでテキストファイルをリストとして読み込めるはずです。
-
Pythonでファイルを読み込む方法:read・readline・readlinesの使い方を徹底解説
open()関数でファイルを開き、「r」モードを指定することでファイルを読み取ることができます。read()、readline()、readlines()の各関数は、開いたファイルの内容を返します。 Pythonは、データ処理を行いたい場合に非常に便利なプログラミング言語です。ファイルの読み書きや操作を簡単に行える組み込み関数が数多く用意されています。 例えば、従業員名のリストがあり、あるユーザーの名前がそのリストに含まれているかどうかを確認したいとしましょう。従業員名のリストをファイルとして保存しておけば、Pythonでそのファイルを読み込み、名前が登録されているかをチェックできます。 こ
-
Windows 11でフォルダ内のファイル一覧をテキストファイルに書き出す2つの方法
Windows 11のエクスプローラーには、フォルダ内のファイル一覧をそのままテキストファイルにコピーする機能が標準で用意されていません。フォルダ内のファイルをすべて選択して「パスのコピー」を使えばファイルパスを貼り付けることはできますが、ファイル一覧を作成する方法としては決して理想的とは言えません。 Windows 11でフォルダのファイル一覧をテキストファイルに書き出すには、便利な方法が2つあります。1つはコマンドプロンプトでコマンドを実行する方法。もう1つはレジストリを編集して、右クリックメニューに「ファイル一覧をクリップボードにコピー」オプションを追加する方法です。 コマンドプロンプト