Pythonでもテキストファイル読み込みします。
これまでの学習で、なんとなくRubyの書き方でPythonもいけるんじゃないか、という気がするのでやってみます。
takk@deb9:~$ cat read.py f=open("read.py") print(f.gets()) f.close() takk@deb9:~$
スクリプト自身を一行だけ読み込んで表示するスクリプトです。
これをRubyで実行すると、
takk@deb9:~$ ruby read.py f=open("read.py") takk@deb9:~$
当然表示されます。では、Pythonで実行してみましょう。
takk@deb9:~$ python3 read.py Traceback (most recent call last): File "read.py", line 2, in <module> print(f.gets()) AttributeError: '_io.TextIOWrapper' object has no attribute 'gets' takk@deb9:~$
エラーになりました。でも、共通の書き方があるような気もします。次はgetsをreadに変えて実行してみます。
takk@deb9:~$ cat read.py f=open("read.py") print(f.read()) f.close() takk@deb9:~$
まずはRubyから。
takk@deb9:~$ ruby read.py f=open("read.py") print(f.read()) f.close() takk@deb9:~$
全行読み込まれて表示されました。
次はPython。
takk@deb9:~$ python read.py f=open("read.py") print(f.read()) f.close() takk@deb9:~$
なんと! 表示されました。直感で使えるなんて優れた言語だと思います。
Rubyの時も良く分からなかったのですが、ただの関数に見えるopenって何者なんでしょうか。分からないので表示してみましょう。たぶん、type。
>>> type(open("read.py")) <class '_io.TextIOWrapper'> >>>
出ました。つまり、TextIOWrapperクラスのオブジェクトなんだけど、省略してopenって書けるってことなんでしょうね。
Rubyのopenも調べてみます。といっても、勝手に表示されます。
takk@deb9:~/py$ irb --simple-prompt >> f=open("read.py") => #<File:read.py> >>
Fileクラスのようです。File.openなんですね。
コメント