Python での入出力の処理

PythonBeginner
オンラインで実践に進む

はじめに

この実験 (Lab) では、Python における入出力 (Input/Output) の基本概念について学習します。print() 関数を使用してコンソールに情報を表示する方法と、キーボードからユーザー入力を取得する方法を探ります。

さらに、ファイルへのデータの書き込みと、そこからのデータの読み出しに関する実践的な経験を積みます。これらは、ユーザーとの対話やファイルに保存されたデータを扱う必要がある、あらゆる Python プログラムにとって不可欠なスキルです。

コンソールへの文字列の出力

Python において、コンソールに出力を表示するための主要な関数は print() です。その使い方は簡単です。このステップでは、print() を使用してテキストを表示する練習をします。

まず、WebIDE の左側にあるファイルエクスプローラーで output.py ファイルを見つけます。それをダブルクリックしてエディタで開いてください。

output.py に以下のコード行を追加します。

print("Hello, LabEx!")
print("This is a Python course.")

ファイルを保存します(ショートカットキー Ctrl+S が使えます)。このスクリプトを実行するには、WebIDE の下部にあるターミナルを開き、次のコマンドを実行します。ターミナルはすでに ~/project ディレクトリにあるはずです。

python ~/project/output.py

ターミナルには、以下の出力が表示されます。

Hello, LabEx!
This is a Python course.

print() 関数は、カンマで区切られた複数の引数を受け取ることもできます。デフォルトでは、それらは単一のスペースを挟んで表示されます。

output.py ファイルの内容を以下の行に置き換えて変更します。

print("Apple", "Banana", "Orange", "Grape", "Watermelon")

ファイルを保存し、ターミナルから再度実行します。

python ~/project/output.py

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

Apple Banana Orange Grape Watermelon

sep パラメータを使用することで、区切り文字をカスタマイズできます。sep のデフォルト値はスペース (' ') です。これを縦棒(パイプ)に変更してみましょう。

output.py をもう一度変更します。

print("Apple", "Banana", "Orange", "Grape", "Watermelon", sep=" | ")

スクリプトを保存して実行します。

python ~/project/output.py

出力では、カスタムの区切り文字が使用されていることがわかります。

Apple | Banana | Orange | Grape | Watermelon

これにより、コンソール出力の形式を制御する方法が示されました。

キーボードからのユーザー入力の取得

これまでのスクリプトは、定義済みのコンテンツのみを表示してきました。プログラムをよりインタラクティブにするためには、ユーザーからの入力を取得する必要があります。Python では、input() 関数を使用してこれを行うことができます。

WebIDE のファイルエクスプローラーで interactive.py ファイルを見つけて開きます。以下のコードをファイルに追加します。

name = input("Please enter your name: ")
print("Your name is:", name)

input() 関数は、ユーザーにプロンプト(引数として渡した文字列)を表示し、ユーザーが何かを入力して Enter キーを押すのを待ちます。ユーザーが入力したテキストは文字列として返され、それを変数 name に格納します。

ファイルを保存し、ターミナルからスクリプトを実行します。

python ~/project/interactive.py

スクリプトは一時停止し、プロンプトを表示します。名前を入力して Enter キーを押してください。

Please enter your name: Labex User
Your name is: Labex User

スクリプトはあなたの入力をキャプチャし、最後の print() ステートメントで使用します。これは、インタラクティブなコマンドラインアプリケーションを作成するための基本的なテクニックです。

ファイルへのデータ書き込み

ファイルの読み書きは、一般的で不可欠な I/O 操作です。Python では、組み込みの open() 関数を使用してファイルを操作します。

基本的な構文は open(filename, mode) です。mode 引数は、ファイルがどのように使用されるかを指定します。一般的なモードには以下のようなものがあります。

  • 'w': 書き込みモード (Write mode)。書き込み用に新しいファイルを作成します。ファイルが既に存在する場合、その内容は消去されます。
  • 'r': 読み取りモード (Read mode)。既存のファイルを読み取り用に開きます。これがデフォルトモードです。
  • 'a': 追記モード (Append mode)。ファイルの末尾にコンテンツを追加するためにファイルを開きます。ファイルが存在しない場合は作成されます。

ファイルを扱うための推奨される方法は、with ステートメントを使用することです。これにより、エラーが発生した場合でもファイルが自動的に閉じられます。

ファイルにテキストを書き込む練習をしましょう。WebIDE エディタで file_io.py ファイルを開き、以下のコードを追加します。

with open("book.txt", "w") as f:
    f.write("Bed before bright moonlight,\n")
    f.write("Suspected to be frost on the ground.\n")
    f.write("Head held high, gazing at the bright moon,\n")
    f.write("Head bowed low, thinking of my homeland.")

このコードは、book.txt という名前のファイルを書き込みモード ('w') で開きます。f.write() メソッドは文字列をファイルに書き込みます。\n 文字は改行を表すため、各 write 呼び出しは新しい行で終了します。

ファイルを保存し、ターミナルからスクリプトを実行します。

python ~/project/file_io.py

このコマンドはコンソールに何も出力しませんが、~/project ディレクトリ内に book.txt という新しいファイルが作成されます。ターミナルで cat コマンドを使用してその内容を確認できます。

cat ~/project/book.txt

出力は、ファイルに書き込んだテキストになるはずです。

Bed before bright moonlight,
Suspected to be frost on the ground.
Head held high, gazing at the bright moon,
Head bowed low, thinking of my homeland.

with ステートメントを使用することはベストプラクティスです。なぜなら、コードブロックが実行された後、ファイルが適切に閉じられることが保証されるからです。

ファイルからのデータ読み取り

book.txt を作成し書き込んだので、その内容を読み取る方法を学びましょう。Python にはファイルを読み取るためのいくつかのメソッドがあります。最も一般的なものをいくつか見ていきます。

引き続き file_io.py スクリプトを使用します。作成したファイルを読み取るためのコードを追加します。

read() メソッド

read() メソッドは、ファイルの内容全体を読み取り、単一の文字列として返します。

file_io.py スクリプトの末尾に次のコードを追加します。これにより、スクリプトはまずファイルを書き込み、次にそれを読み取って内容を出力するようになります。

## The writing code from the previous step should be above this

print("\n--- Reading entire file with read() ---")
with open("book.txt", "r") as f:
    content = f.read()
    print(content)

ファイルを保存し、ターミナルから実行します。

python ~/project/file_io.py

出力には、book.txt の内容がコンソールに出力されるようになります。

--- Reading entire file with read() ---
Bed before bright moonlight,
Suspected to be frost on the ground.
Head held high, gazing at the bright moon,
Head bowed low, thinking of my homeland.

行ごとのイテレーション (Iterating Over Lines)

特に大きなファイルを扱う場合、メモリ効率の良い方法は、ファイルを一行ずつ処理することです。これは、for ループでファイルオブジェクトを直接イテレートすることで実現できます。

次に、このコードブロックを file_io.py に追加します。

print("\n--- Reading file line by line ---")
with open("book.txt", "r") as f:
    for line in f:
        print(line, end='')

ここでは、print() 関数の end='' が、ファイルから読み取られた各 line に既に改行文字 (\n) が含まれているため、余分な改行が追加されるのを防いでいます。

再度保存してスクリプトを実行します。

python ~/project/file_io.py

このセクションの出力は read() メソッドの出力と同一になりますが、基盤となる処理は異なり、一度に一行ずつ読み取ります。

readlines() メソッド

readlines() メソッドは、ファイルからすべての行を読み取り、文字列のリストとして返します。

最後に、この最後のコードブロックを file_io.py に追加します。

print("\n\n--- Reading all lines with readlines() ---")
with open("book.txt", "r") as f:
    all_lines = f.readlines()
    print(all_lines)

保存し、最後に一度だけスクリプトを実行します。

python ~/project/file_io.py

このセクションの出力は Python のリストになり、各要素はファイル内の行を表す文字列になります。

--- Reading all lines with readlines() ---
['Bed before bright moonlight,\n', 'Suspected to be frost on the ground.\n', 'Head held high, gazing at the bright moon,\n', 'Head bowed low, thinking of my homeland.']

これで、Python でファイルの書き込みと読み取りの両方を行うための基本的なメソッドを練習しました。

まとめ

この実験 (Lab) では、Python における入出力 (I/O) の基本的なテクニックを学びました。まず、print() 関数を使用して、セパレータのカスタマイズ方法を含め、整形されたテキストをコンソールに表示する方法から始めました。次に、キーボードから input() 関数を使ってユーザー入力を取得し、プログラムを対話的にする方法を探りました。

最後に、ファイル I/O 操作を探求しました。推奨される with ステートメントを使用して、書き込みモード (write mode) で open() を利用してファイルにデータを書き込む方法を学びました。また、read()、行ごとのイテレーション、readlines() を含む様々な方法を使用して、ファイルからデータを読み戻す練習をしました。これらのスキルは、ユーザーやデータと対話する、より複雑な Python アプリケーションを構築するための基礎となります。