Python(読み込み)

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

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA