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なんですね。


コメント