読者です 読者をやめる 読者になる 読者になる

StatsBeginner: 初学者の統計学習ノート

初学者が統計学、機械学習、R、Pythonの勉強の過程をメモっていくノート。

『Pythonスタートブック』第6章

Python 『Pythonスタートブック』

 全然、Pythonを勉強する時間が取れず、滞っていますw
 とりあえず、『Pythonスタートブック』の第6章だけやりました。


Pythonスタートブック

Pythonスタートブック


 第6章は、テキストファイルを作ったり、読み込んだり、書き込んだりする操作を習う章です。

第6章のメモ

 まず、テキストファイルを生成する。
 test_file = open(’test.txt’, ‘w’)
 と書くと、open()関数で生成したファイルを、test_fileという変数名で受け取っていることになり、この変数に対していろいろなメソッドを適用し、ファイルを操作する。


 たとえば、
 test_file.write(‘Hello!’)
 と書くと、test.txtの中に「Hello!」と書き込まれる。
 ただし、この操作をしたあとにflushというメソッドをつかって、
 test_file.flush()
 とそいう操作をしておかないとファイルに文字列が書き込まれない。


 flushメソッドを使わなければいけないのは、メモリからハードディスクへのデータの書き込みを確実に完了するためらしい。教科書には、この例題のように軽い内容ならべつにflushメソッドを使わなくてもたいてい書き込まれてるはずだと書かれてるが、やってみたところ書き込まれてなくて、やはりflushメソッドを使わないとだめだった。


 処理が終わったら、
 test_file.close()
 というメソッドで、変数とファイルを切り離しておかないといけないらしい。このことの意味はイマイチ理解していない。


 たとえばファイルに何か書き込みたいのであれば、そのファイルを変数に渡し、かつそれが書き込みモードで開かれていなくてはならない。open()関数中の第2引数は「モード」とも呼ばれ、ここを’w’にしてopenしておかないと、ファイルには書き込めないということである。
 つまり、test_fileという変数が仮にすでに存在していたとしても、
 test_file = open(’test.txt’, ‘w’)
 と「w」モードで開いているステータスでない限り、
 test_file.write(‘hogehoge’)
 と打ったとしても、
 File not open for writing
 というエラーメッセージが出る。


 文字列が2行書き込まれているテキストファイルに対し、.readline()メソッドを使うと、1回目は1行目、2回目は2行目が読まれる。3回目以降は空白しか返ってこないし、その後にreadlines()でも空白しか返らない。もう一度内容を読みたければ、あらためてopen()関数で’r’モードで開いたファイルを変数に渡してやらなければならない。


 制御文字については改行の「\n」とタブの「\t」だけ覚えていけばだいたいは事足りる。


 文字列型に.strip()メソッドを使うと、空白やタブや制御文字を取り除いた結果を返してくれる。ストリップ。


 文字列型の.joinメソッドは、リストやタプルを引数にとって、文字列を間に挟んでリスト等の要素を結合する。以下のような感じ。
 '-'.join(['a', 'b’])
 'a-b’


 この章の最後に、for文をつかってテキストファイルの中身を読み出してみるというのが載っている。
 for line in test_file:
 とやると、test_fileという変数に渡されたテキストファイル中身を1行目から順に処理していく。

今後の課題など(毎回コピー&追記)

  • 「変数」「モジュール」「オブジェクト」「メソッド」「インスタンス」「データ型」など基本用語さ指す範囲や包含関係にまだ曖昧なところがあるので頭を整理する
  • 日本語のリストを変数に代入して、print(変数)したとき、日本語の出力が文字化けするのをどうしたらいいのか
  • CanopyつかうのにX codeってほんとに必要なの?なくても大丈夫?
  • Canopyのシェルから操作することと、OSのシェル(ターミナル)から操作することの違いがよくわかってない。Canopyを起動するとPythonも起動してると思うんだけど、それとは無関係に同時にターミナルでPythonを起動したり終了したりできるのもよくわからない。知恵袋とか読むと、Pythonを2個同時に起動している状態というのもあるらしいが、意味がよくわからない。
  • raw_inputという関数を使ったときに、コマンドラインに表示されるメッセージが、Canopyで文字化けする。処理の結果とかはきちんと日本語で表示されるのに。OSのターミナルからスクリプトファイルを呼び出して実行すると、文字化けしなかった。
  • Rのエディタのように、スクリプトを書いてマウスで選択した部分だけその都度実行するというツールがあると、とてもやりやすいんだけど、そういうのはないのかな?(探したけどよくわからない)
  • ファイル型の操作がイマイチ分かってない。変数名に対してopen()でモード(wとかr)も指定してファイルを渡すというのはわかったが、これはPythonがあるモードでファイルにアクセスしているという状態を指すと考えればいいのかな?Rだと、R内のオブジェクトにデータを渡してそこからはR内で処理していくだけで、ファイル型というものは扱わない(扱うのかもしれんけど)が、Pythonのファイル型はあくまでファイルに対する処理だから、頭を切り換えないといけないのか。
  • んで、たとえば.readline()メソッドでファイルの中身を読み出すと、そのファイルが渡された変数の、Python内におけるその時点での状態が変化しているようなのだが、このファイル型変数が持っているその時点の状態をどういうふうに理解すればいいのかがまだわかってない。