Python でファイルを処理する方法

Python でファイルを処理する方法

どのプログラミング言語でも、ファイル処理は重要な側面です。また、Python は、ファイルの読み取りと書き込みなど、さまざまなモードでのファイルの操作もサポートしています。

このチュートリアルを終えると、次のことができるようになります。

  • Python でファイルを開いて読み取る、
  • テキストファイルから行を読み取り、
  • ファイルに書き込んで追加する、そして
  • コンテキスト マネージャーを使用して Python でファイルを操作します。

Python でファイルを読み取る方法

Python でファイルを開くには、一般的な構文open('file_name','mode')を使用できます。

  • ここで、 file_nameファイルの名前です。

注:開きたいファイルが現在の作業ディレクトリにある場合は、ファイルの名前のみを指定できます。作業環境内の別のフォルダーにある場合は、ファイルへのパスを含める必要があります。

  • パラメータmodeファイルを開くモードを指定します。

ファイルを開くためのデフォルトのモードは読み取りであり、文字'r'で示されます。ただし、モードを明示的に指定することをお勧めします。

始める前に、この例で使用するファイルlib.txtを見てみましょう。

📁 このチュートリアルで使用するテキスト ファイルとコードを、この GitHub リポジトリからダウンロードします。

以下のコード スニペットはopen()関数を使用して Python でテキスト ファイル'lib.txt'を開き、その内容を読み取る方法を示しています。

 file = open('lib.txt','r')
contents = file.read()
print(contents)
file.close()


# Output
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

上の例では、

  • open()関数はファイル オブジェクトを返すので、それをfileと呼ぶことにします。
  • 次に、 fileに対してread()メソッドを呼び出します。
  • 変数のcontentsにはファイルの内容が含まれます。そしてそれをプリントアウトします。
  • 最後に、ファイルを閉じます。

ただし、ファイルを閉じるのを忘れると、リソースが無駄になる可能性があります。このようなファイルを大量に操作している場合は、大量のメモリが使用される可能性があります。これは、複数のファイルを開いたものの、どれも閉じていないことが原因です。

それでは、次を使用してファイルを開くより良い方法を学びましょう。 コンテキストマネージャー。以下のコード スニペットは、それらの使用方法を示しています。

 with open('lib.txt','r') as f:
  contents = f.read()
  print(contents)

連絡先マネージャーを使用してファイルを操作する場合、 close()メソッドを使用する必要はありません。ファイルは、I/O 操作が完了すると自動的に閉じられます。

Python でファイルから行を読み取る方法

サンプル テキスト ファイルには数行しかありませんでした。したがって、ファイルの内容をすべて一度に読み取ることは問題ありませんでした。

Python-読み取りファイル
Python-読み取りファイル

ただし、大きなファイルを読み取る必要がある場合、上記のようにread()メソッドを使用するのはあまり効率的ではない可能性があります。

実際、テキスト ファイルのサイズが非常に大きい場合は、すぐにメモリ不足になる可能性があります。このため、テキスト ファイルから読み取り専用の行を読み込む必要がある場合があります。このセクションでは、その方法を学びます。

Python の readline() メソッドを使用してファイルから行を読み取る

readline()メソッドは、ファイルから一度に 1 行を読み取ります。

次のコード スニペットを実行します。

 with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  line = f.readline()
  print(line)


# Output
Hello, there!

Here are a few helpful Python libraries:

最初のreadline()メソッド呼び出しの後、ファイルの最初の行が出力されることがわかります。そして、 readline()メソッドの 2 回目の呼び出しでは、ファイルの 2 行目が返されます。

これは、最初のメソッド呼び出しの後、ファイル ポインターが 2 行目の先頭にあるためです。

Python では、 tell()メソッドを使用して、ファイル ポインターの現在の位置を取得できます。ファイル ポインタを特定の場所に移動するには、 seek()メソッドを使用します。

以下のコード スニペットでは、最初のメソッド呼び出しの後にf.seek(0)を使用します。これにより、ファイル ポインタがテキスト ファイルの先頭に移動します。そのため、どちらの場合も、ファイルの最初の行が出力されます。

 with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  f.seek(0)
  line = f.readline()
  print(line)


# Output
Hello, there!

Hello, there!

Python の readlines() メソッドを使用してファイルから行を読み取る

readlines()と呼ばれる別の密接に関連したメソッドがあります。

次のコード スニペットを実行すると、 readlines()メソッドがファイル内のすべての行のリストを返すことがわかります。

 with open('lib.txt','r') as f:
  lines = f.readlines()
  print(lines)


# Output
['Hello, there!\n', 'Here are a few helpful Python libraries:\n', 
'1) NumPy\n', '2) pandas\n', '3) matplotlib\n', 
'4) seaborn\n', '5) scikit-learn\n', '6) BeautifulSoup\n', 
'7) Scrapy\n', '8) nltk\n', '9) Bokeh\n', '10) statsmodels\n', '\n']

Python の for ループを使用してファイルから行を読み取る

テキスト ファイルから行を読み取るには、 forループを使用することもできます。

ファイル オブジェクトを取得したら、以下に示すように、 forループを使用してファイルの内容を一度に 1 行ずつ繰り返して出力できます。一度に 1 行のみにアクセスし、ファイルの内容全体を読み取っていないことに注目してください。

 with open('lib.txt','r') as f:
  for line in f:
    print(line, end='')

: Python のprint()関数を使用する場合、デフォルトの区切り文字は改行文字'\n'文字) です。しかし、元のファイルにはこれらの新しい行はありません。したがって、ファイルの内容をそのまま出力するには、区切り文字引数を空の文字列に設定します: end = ''

Python でファイルからコンテンツのチャンクを読み取る方法

Python では、ファイルの内容を小さなチャンクとして読み取ることも選択できます。

以下のコードを読んでください。

  • ここでは、 chunk_size50に設定します。これは、ファイルの最初の 50 文字が読み取られ、出力されることを意味します。
  • ここで、ファイル オブジェクトfに対してtell()メソッドを呼び出します。ファイル ポインターが位置 51 にあることがわかります。これは予想どおりです。
 chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk)
  current = f.tell()
  print(f"Current position of file pointer: {current}")

# Output
Hello, there!
Here are a few helpful Python librar
Current position of file pointer: 51

この手法を使用して、ファイル全体を小さなチャンクとして読み取ることもできます。

次のコード スニペットは、これを行う方法を示しています。

 chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk,end='')

  while(len(chunk)>0):
    chunk = f.read(chunk_size)
    print(chunk,end='')

# Output
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

ここでは、 whileループを使用してファイルの内容を読み取ります。ファイルの最後に到達するまで、ファイルの内容をサイズ 50 のチャンクで読み取ります。 ✅

Python でファイルに書き込む方法

Python でテキスト ファイルに書き込むには、 'w'を指定して書き込みモードでファイルを開く必要があります。

Python-ファイルへの書き込み
Python-ファイルへの書き込み

以下のコード スニペットは、その方法を示しています。

 with open('new_file.txt','w') as f:
  f.write('Hello, Python!')

'new_file.txt'作業ディレクトリに作成されたことがわかります。

ここで、上記のコードセルをもう一度実行します。

ターミナルで次のコマンドを実行します。

 cat new_file.txt

# Output: Hello, Python!

理想的には、ファイルに 2 回書き込んだことになります。 Hello, Python! 2回印刷すべきでしたね?

ただし、一度しか印刷されていないことがわかります。これは、書き込み( w ) モードでファイルを開くと、基本的にファイルの内容が新しい内容で上書きされるためです。

既存のコンテンツを上書きせずにファイルの末尾に追加したい場合は、ファイルを追加モードで開く必要があります。これを行う方法については、次のセクションで説明します。

Python でファイルに追加する方法

上書きせずにファイルにコンテンツを追加する場合は、追加モードでファイルを開きます。

これを行うには、` 'a' (追加のa)を使用し、モードを明示的に指定します。

次に、次のコードセルを 2 回実行します。

 with open('new_file.txt','a') as f:
  f.write('Hello, Python!')

ファイルに追加したため、テキストが 2 回出力されることに注目してください。

 cat new_file.txt

# Output: Hello, Python!Hello, Python!

結論

このチュートリアルで説明した内容を簡単にまとめてみましょう。

  • ファイルの読み取り、書き込み、追加などの一般的なファイル I/O 操作を学習しました。
  • さらに、 seek()メソッドを使用してファイル ポインタを特定の位置に移動する方法も学びました。
  • Tell()メソッドを使用してファイル ポインタの現在位置を取得する方法。

このチュートリアルがお役に立てば幸いです。 Python でテキスト ファイルを操作する方法を学習したので、次は Python で JSON ファイルを操作する方法を学習します。

関連している:

Python でリストの長さを 3 つのステップで確認します。

「 Python でファイルを処理する方法」についてわかりやすく解説!絶対に観るべきベスト2動画

Pythonでのファイルの読み込みや書き込み、作成、圧縮や展開方法を徹底理解!(初心者にもわかりやすく)【Python入門・応用20】
【Pythonプログラミング入門】ファイルの操作を解説!〜VTuberと学習〜 【初心者向け】