5
11

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 5 years have passed since last update.

pythonのファイルの読み書き

Last updated at Posted at 2018-10-28

はじめに

pythonの基礎として、ファイルの読み書きについて記載したいと思います。

環境

python3.6
macOS

基本

ファイルを読み書きするにはopen(filename, mode)を使います。

>>> f = open('file名', 'w')

第一引数にファイル名を、第二引数にはファイルの扱い方について記載します。

第二引数に関しては

読み取り専用:r  (引数が省略されている場合はrになります)
書き込み専用:w
追記用:a (書き込まれた内容が自動的にファイルの終端に追加されます)
読み書き両用:r+
バイナリモード:b

with文

withを使うと、同じことをtry-finallyを使って書くより簡単に書くことができます。

>>> f = open('/Users/hoge/Desktop/test.txt') 
>>> f.closed
False
>>> f.close()
>>> f.closed
True
>>> with open('/Users/hoge/Desktop/test.txt') as f:
...     dt = f.read()
... 
>>> f.closed
True

withを使わない場合は、f.close() を呼び出してファイルを閉じる必要があります。
ファイルを閉じなかった場合は、ファイルが開かれたままになる可能性があります。

内容の読み込み

ファイルの内容を読み込むにはread(size)を使います。
sizeはオプションの数値引数で、sizeが省略されたり場合は、ファイルの内容全てを読み込みます。size指定された場合は、指定したバイト数の読みこみを行います。

>>> f = open('/Users/hoge/Desktop/test.txt') 
>>> f.read()
'test\n'

f.readline() は1行だけを読み取ります。
\nは読み出された文字列の終端に残ります。空の文字列を返ってきたら、ファイルの終端に達したことが分かります。

>>> f = open('/Users/hoge/Desktop/test.txt') 
>>> f.readline()
'test\n'
>>> f.readline()
''

内容の書き込み

f.write(string) は、stringの内容を書き込み、書き込まれた文字数を返します。

>>> f = open('/Users/hoge/Desktop/test.txt',"w") 
>>> f.write('This is a test\n')
15

位置について

f.tell()は現在の位置を示す整数を返します。バイナリモードの時にファイルの先頭からのバイト数で返します。
位置を変更するには、f.seek(offset, from_what)を使います。
ファイル位置は基準点にオフセット値を足して計算されます。参照点はfrom_what引数で選びます。

>>> f = open('/Users/hoge/Desktop/test.txt',"rb+") 
>>> f.write(b'0123456789abcdef')
16
>>> f.read(1)
b''
>>> f.seek(5)  
5
>>> f.read(1)
b'5'
>>> f.seek(-3, 2)
13
>>> f.read(1)
b'd'

from_whatの値が
0なら先頭から
1なら現在のファイル位置
2なら終端
を参照点として使います。
※from_whatは省略可能で、デフォルトは0を使います。

json

先ほどのread()は文字列しか返さないため、数値を扱うのは大変です。
int関数とかを使えば、できなくはない?

これを簡単にするために、JSONが使えます。

標準モジュールのjsonは

  • 文字列表現に変換(シリアライズ)
  • 文字列表現からデータの再構築(デシリアライズ)
    ができます。
>>> json_test="""
... {"age":33,
...  "weight":78,
...  "height":175,
...  "area":"chiba"
... }
... """
>>> import json
>>> data = json.loads(json_test)
>>> data
{'age': 33, 'weight': 78, 'height': 175, 'area': 'chiba'}
>>> type(data) #jsonをpythonで辞書型として読み込むことができた
<class 'dict'>
>>> json.dumps(data) #json形式に戻す
'{"age": 33, "weight": 78, "height": 175, "area": "chiba"}'
>>> json.dump(data, open("data.json","w")) #ファイルの書き込み
>>> json.load(open("data.json"))#読み込み確認
{'age': 33, 'weight': 78, 'height': 175, 'area': 'chiba'}

おわり

5
11
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
5
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?