バリケンのPython日記 RSSフィード

2008-08-18

[] ファイルアクセス  ファイルアクセス - バリケンのPython日記 を含むブックマーク はてなブックマーク -  ファイルアクセス - バリケンのPython日記  ファイルアクセス - バリケンのPython日記 のブックマークコメント

open()関数

Pythonでファイルを利用するには、open()関数を使うよ。

「open(ファイル名, モード)」で、戻り値としてファイルオブジェクトが得られるよ。「ファイル名」は相対パス絶対パスでファイルの位置を文字列で与えるよ。「モード引数」はオプションで、省略すると'r'(ファイルからデータを読み込むことのみ可能)を指定したことになるみたいだよ。

「モード引数オプションには、'r'のほかに'w'(書き込み専用・すでにファイルがある場合はファイルをクリアし、先頭から書き込み)、'a'(書き込み専用・すでにファイルがある場合はファイルの末尾から追記書き込み)、'r+'(読み書き可能)が指定できるよ。さらに'b'を追記すると、ファイルをバイナリモードで開くことが出来るよ。バイナリモードに関する説明は、また今度。

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

open()関数戻り値として得られたファイルオブジェクトに対して、いろいろなメソッドを呼び出すことでファイルに対して読み書きをすることが出来るよ。

read()メソッドは、引数で与えたバイト数のデータをファイルから読み込んで、その結果を文字列として返すよ。引数を省略すると、全てのデータを読み込むよ。

readline()メソッドは、ファイルから一行だけ読み込んで、その結果を文字列として返すよ。文字列の最後には改行文字が含まれるよ。空行であれば改行文字だけが返るよ。ファイルの終端であれば空の文字列が返るよ。

readlines()メソッドは、ファイルに入っているデータの全ての行からなる文字列のリストを返すよ。引数が与えられると、ファイルから指定されたバイト数を読み出して、さらに一行を完成させるのに必要なだけを読み出して、読み出された行からなるリストを返すよ。

write()メソッドは、引数で与えた文字列をファイルに書き込むよ。戻り値はNoneだよ。

tell()メソッドは、現在のファイルポインタの位置をファイル先頭からのバイト数で返すよ。

seek()メソッドは、。「seek(オフセット, 基準位置)」のように呼び出すことで、ファイルポインタの位置を変更するよ。「基準位置」が0ならばファイルの先頭、1ならば現在のファイルポインタの位置、2ならばファイルの終端を基準として、オフセット分だけファイルポインタの位置をずらすようにして位置を指定できるよ。「基準位置」を省略すると、0を指定したことになるよ。「オフセット」は負の数を指定するとファイルポインタを戻す(左に移動する)ことが出来るよ。

close()メソッドでそのファイルを閉じることができるよ。

じゃあ、ファイルオブジェクトに対していろんなメソッドを呼び出して試してみよう!

>>> f = open('test.txt', 'w')
>>> f.write('hoge')
>>> f.write('fuga')
>>> f.tell()
8L
>>> f.close()
>>> f = open('test.txt')
>>> f.read()
'hogefuga'
>>> f.read()
''
>>> f.tell()
8L
>>> f.seek(0)
>>> f.tell()
0L
>>> f.read()
'hogefuga'
>>> f.close()
>>> 

「8L」とか「0L」はlong型の数値なんだけど、説明はまた今度。

トラックバック - http://python.g.hatena.ne.jp/muscovyduck/20080818

2008-08-17

[] rjust()メソッド、ljust()メソッド、center()メソッド、zfill()メソッド  rjust()メソッド、ljust()メソッド、center()メソッド、zfill()メソッド - バリケンのPython日記 を含むブックマーク はてなブックマーク -  rjust()メソッド、ljust()メソッド、center()メソッド、zfill()メソッド - バリケンのPython日記  rjust()メソッド、ljust()メソッド、center()メソッド、zfill()メソッド - バリケンのPython日記 のブックマークコメント

文字列に対してrjust()メソッド、ljust()メソッド、center()メソッドを呼び出すと、元の文字列に空白を追加して、引数で与えた文字数となる文字列を生成してくれるよ。

空白の追加される場所は、rjust()メソッドは左側、ljust()メソッドは右側、center()メソッドは両側だよ。じゃあ、実際にメソッドを呼び出してその戻り値を見てみよう!

>>> "abc".rjust(10)
'       abc'
>>> "abc".ljust(10)
'abc       '
>>> "abc".center(10)
'   abc    '
>>> 

rjust()メソッドと動作が似ているzfill()というメソッドがあるよ。zfill()メソッドは、左側を空白じゃなくてゼロで埋めてくれるよ。

>>> "abc".zfill(10)
'0000000abc'
>>>

元の文字列の文字数が引数で与えた数よりも長い場合、元の値がそのまま返るよ。

>>> "hogehoge".rjust(3)
'hogehoge'
>>> "hogehoge".ljust(3)
'hogehoge'
>>> "hogehoge".center(3)
'hogehoge'
>>> "hogehoge".zfill(3)
'hogehoge'
>>>
トラックバック - http://python.g.hatena.ne.jp/muscovyduck/20080817

2008-08-16

[] str()関数とrepr()関数  str()関数とrepr()関数 - バリケンのPython日記 を含むブックマーク はてなブックマーク -  str()関数とrepr()関数 - バリケンのPython日記  str()関数とrepr()関数 - バリケンのPython日記 のブックマークコメント

ある値を文字列にしたい時には、str()関数かrepr()関数を使うよ。

str()関数引数で与えた値を人間が読みやすい文字列に、repr()関数引数で与えた値と等価な値を返すインタプリタ表現(リテラル表記)を文字列として返すよ。

>>> s = 'Hello, world.'
>>> str(s)
'Hello, world.'
>>> repr(s)
"'Hello, world.'"
>>> str(0.1)
'0.1'
>>> repr(0.1)
'0.10000000000000001'
>>>

repr(0.1)の結果が'0.10000000000000001'になってしまう理由はこちらを参照してね。

トラックバック - http://python.g.hatena.ne.jp/muscovyduck/20080816

2008-08-15

[] パッケージ(3)  パッケージ(3) - バリケンのPython日記 を含むブックマーク はてなブックマーク -  パッケージ(3) - バリケンのPython日記  パッケージ(3) - バリケンのPython日記 のブックマークコメント

以前の日記でも出てきたワイルドカードを使ってパッケージのモジュールを読み込む場合、たとえば「from hoge.fuga.foo import *」とするとき、fooがパッケージの場合は注意が必要だよ。

この場合、そのパッケージのディレクトリに設置された「__init__.py」ファイルの中に、__all__変数ワイルドカードインポート指定されたときに読み込むモジュールの名前のリストを書いておく必要があるよ。たとえば__init__.pyに

__all__ = ["bar", "baz", "qux"]

と書いておくと、そのパッケージをワイルドカードを使って読み込んだ場合、bar.py、baz.py、qux.pyの3つのモジュールを読むよ。

あるパッケージ内のモジュール同士であれば、モジュール名の指定はフルパス指定しなくてもインポートすることが出来るよ。たとえばパッケージ fooの中にbar.pyとbaz.pyがある場合、bar.pyがbaz.pyを利用したいときはbar.py内で「import baz」のように指定することができるよ。

これは同じフォルダ内にあるモジュール同士のみ可能で、サブディレクトリや上位ディレクトリにあるモジュールを指定する場合はフルパス指定する必要があるみたいだよ。

トラックバック - http://python.g.hatena.ne.jp/muscovyduck/20080815

2008-08-14

[] パッケージ(2)  パッケージ(2) - バリケンのPython日記 を含むブックマーク はてなブックマーク -  パッケージ(2) - バリケンのPython日記  パッケージ(2) - バリケンのPython日記 のブックマークコメント

モジュールインポート時に「import hoge.fuga.foo.bar」のように書いた場合、「hoge」「fuga」「foo」はパッケージ名じゃないといけないみたいだよ。最後の「bar」は、パッケージ名またはモジュール名とすることができるよ。

「from hoge.fuga.foo import bar」のように書いた場合、「hoge」「fuga」はパッケージ名、「foo」はパッケージ名またはモジュール名、「bar」は(fooがモジュールなら)fooで定義された名前、または(fooがパッケージなら)パッケージ名またはモジュール名を指定できるよ。

昨日の日記で例に出てきた「google.appengine.api.users」モジュールの場合、

のような感じでいろいろな方法でモジュールインポートすることが出来るよ。

上記のそれぞれの方法でインポートした場合、get_current_user()関数を呼び出すには、それぞれ

  • users.get_current_user()
  • get_current_user()
  • google.appengine.api.users.get_current_user()

のような感じで呼び出せるよ。

トラックバック - http://python.g.hatena.ne.jp/muscovyduck/20080814