メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年1月31日木曜日

[Python][お勉強] Python入門(10) - ファイル

ファイルオブジェクトについて見ていく。

目標

  • ファイルオブジェクトについて理解する。
  • ファイルの基本的な操作を覚える。

ファイルオブジェクトとは
マシン上に存在するファイルへのリンクオブジェクトで、ファイルを操作する場合に使用する。
疑問:ファイルであれば操作できるのか?たとえばデバイス等。多分できるんだろうね。


ファイルオブジェクトのカテゴリ
ファイルオブジェクトは「シーケンス」でも「写像」でも「数値」でもない。
じゃあ、なんだ?次のセクションを見るとどうも「エクステンション」カテゴリーらしい。。


ファイルの基本的な操作
操作説明
fp = open('/tmp/spam', 'w')出力ファイルのオープン
fp = open('data', 'r')入力ファイルのオープン
s = fp.read()ファイル全体読み込み。内容を1つの文字列にする
s = fp.read(N)Nバイト読み込み(Nは1バイト以上)
s = fp.readline()行の読み込み(行末記号含む)
L = fp.readlines()ファイル全体読込。内容を文字列のリストとして返す
fp.write(S)文字列Sをファイルに出力
fp.writelines(L)文字列のリストLを全てファイルに出力
fp.close()ファイルのクローズ。ガーベージコレクションの対象になれば自動でクローズされる。




上記を使ってみる。

$ python
Python 2.4.4 (#2, Apr 5 2007, 20:11:18)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> fp = open('aaa','w')
>>> fp.write('hello world\n')
>>> fp.close()
>>>
$ cat aaa
hello world
$

オープン、クローズ、書き込みをしてみた。
次は読み込んでみる。

$ python
Python 2.4.4 (#2, Apr 5 2007, 20:11:18)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> fp = open('aaa','r')
>>> S = fp.read()
>>> fp.close()
>>> S
'hello world\n'
>>>


読めました。
次、複数行パターン。


$ cat aaa
hello world1
hello world2
hello world3
hello world4
$ python
Python 2.4.4 (#2, Apr 5 2007, 20:11:18)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> fp = open('aaa','r')
>>> L = fp.readlines()
>>> fp.close()
>>> L
['hello world1\n', 'hello world2\n', 'hello world3\n', 'hello world4\n']
>>>



複数行の出力も。

>>> fp = open('aaa', 'w')
>>> fp.writelines(['a\n','b\n','c\n'])
>>> fp.close()
>>>
$ cat aaa
a
b
c
$




まとめ
  • ファイルオブジェクトは「数値」でも「シーケンス」でも写像でもない。
  • ファイルの基本的操作open、close、read、write、readline、writeline、readlines、writelines。
  • ファイルオブジェクトが破棄されると自動でクローズされる。
  • とりたてて注目すべきところは無い気がする。


.

0 コメント: