0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Python3】ファイル操作の基礎を理解する

Posted at

はじめに

Pythonでファイル操作するための基礎知識についてまとめます。

対象:Pythonの学習を始めた方向け
動作環境:Python3.8.3(OSはMacOS)

ファイルを読み書きする

ファイルを開く

openメソッド
  • 開く対象ファイルと、開き方(読込/書込)を指定します。
  • ファイルオブジェクトが返却されます。
  • ファイルを操作した後は、closeメソッドの実行が必要です(メモリから解放するため)。
f = open("filename", "mode")
  • "mode"の種類
mode 説明
r 読込モード。      
w 上書きモード。既存の内容は破棄する。 
a 追記モード。ファイルの末尾へ追記する。 
x ファイル新規作成専用の書込モード。ファイルが存在する場合はエラーを返却し、書込は行われない。  
r+ 読み書き両用モード。      

省略すると、"r"として処理されます。

  • ファイルの種類を扱う"mode"

前掲の"mode"と組み合わせて指定できます。

mode 説明
t テキストモード。openメソッドのデフォルトモード。改行コードをプラットフォーム固有の記号から「\n」に変換する。 
b バイナリモード。テキストファイル以外はバイナリモードの利用を推奨。 
withキーワード

withキーワードを使うと必ずファイルオブジェクトはcloseされるので、try〜finallyで実装するより簡潔に書くことができます。

with open("filename") as f:
  f.read()

ファイルオブジェクトのメソッド

f.read(size)
  • sizeに指定した値だけ、文字列 (テキストモードの場合) か bytes オブジェクト (バイナリーモードの場合) として返却します。
  • sizeは省略されたり負の数を指定された場合、ファイルの全内容を返却します。
  • ファイルの終端に達している場合、空の文字列 ('') を返却します。
>>>f.read(10)
'Hello Pyth'
f.readline()
  • ファイルから1行のみ読み取り、返却します。
  • 終端に改行文字(\n)を含みます(改行文字を含まない最終行を除く)。
>>> f.readline()
'Hello Python\n'
複数行の読込
  • ループ処理に効率的にファイルの読み込みを実行できます。
  • ファイルの全ての行をリスト形式で扱いたい場合は、list(f)やf.readlines()を使います。
>>> for line in f:
...     print(line, end='')
... 
Hello Python
Hello Java
Hello Ruby
f.write(string)
  • stringの内容をファイルに書き込み、書き込まれた文字数を返却します。
  • ファイルを閉じるまで、witeメソッドを呼び出すごとに追記されます。

>>> with open("sample.txt", "w") as f:
...     f.write("Japan\n")
...     f.write("USA\n")
...     f.write("China\n")
... 
6
4
6
>>> with open("sample.txt", "r") as f:
...     f.read()
... 
'Japan\nUSA\nChina\n'
f.tell()
  • ファイルの開いている現在の位置を示す整数を返却します。

  • 現在の位置が先頭の場合は「0」を返却

>>> with open("sample.txt", "r") as f:
...     f.tell()
... 
0
  • 5バイト分読み込むと現在位置も移動
>>> with open("sample.txt", "r") as f:
...     f.read(5)
...     f.tell()
... 
'Japan'
5
f.seek(offset, whence)
  • ファイル位置を、基準点(whence)にオフセット値(offset)を加算して計算します。
  • whenceには0:先頭、1:現在の位置、2:終端を指定します。省略した場合は0:先頭として振る舞います。
>>> with open("sample.txt", "rb+") as f:
...     f.write(b"0123456789abcdef")
...     f.seek(3)       #先頭から3バイト分
...     f.read(1)
...     f.seek(-1,2)    #終端から1バイト分
...     f.read(1)
... 
16
3
b'3'
15
b'f'

おわりに

今回は基礎の基礎な内容でした。
次はCSVやjsonなどの扱いについて、理解を深めていきたいと思います(ライブラリが提供されているとのこと)。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?