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

公開: 2022-03-11

どのプログラミング言語でも、ファイル処理は重要な側面です。 また、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-read-file

ただし、大きなファイルを読み込む必要がある場合は、上記のように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()と呼ばれるもう1つの密接に関連するメソッドがあります。

次のコードスニペットを実行すると、 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'文字です。 ただし、元のファイルには、これらの新しい行はありません。 したがって、ファイルの内容をそのまま出力するには、separator引数を空の文字列end = ''に設定します。

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

Pythonでは、ファイルの内容を小さなチャンクで読み込むこともできます。

以下のコードをお読みください。

  • ここでは、 chunk_size50に設定します。 これは、ファイルの最初の50文字が読み込まれ、それらも印刷されることを意味します。
  • 次に、ファイルオブジェクトftell()メソッドを呼び出します。 ファイルポインタが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-write-to-file

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

 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! 二度印刷されるべきでしたね

ただし、印刷されたのは1回だけであることがわかります。 これは、書き込み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つのステップで確認します。