【Python66】Google colab でShellコマンド、ファイルダウンロードなど について【Linux】

シェルコマンド

以前、Google ドライブのマウントや、シェルコマンド用のコラボファイルを作っておいたんですが。。

 Github

Goolgeコラボラトリーで、 !cd と%cd って何が違うんだろう??って思ったのと、Filedownloadでエラーが出るので、少し違いなどを含めて、新しいファイルを作っておきました。

 Github

!と%の違い マジックコマンド

どっちでもいい話ですが、ColabはIPython・Jupyter Notebookをベースに作られていて、シェルコマンドなどを直接打てるのですが、!cd ってやっても チェンジディレクトリしなかったり、!mkdirしても、%mkdirでもどちらでも、ディレクトリは作られるけど。。!でした方は、次使おうと思うと消えていて、%の方は、消えない。。

PythonDataScienceHandbook をちょっと見ていて、!と%の違いが書かれていたのでそれをメモしておきます。

Shell command 等 の使い方

基本は、! か % を付ける。

  • ! は、Temporary Sub shell 内で動く
  • % は、永続的

の違い

  • mkdir cd 等は、%mkdir %cd でないと一時的実行で永続化されない

なので、%mkdirじゃないとダメなんですね。。%cdは何故か??ちょっと理解に苦しみますが(笑)

動き方の例を、colabファイルに作ってあるので、参考にしてみてください。

なお、Linuxのコマンド自体は、こちらのページが参考になるかな?

http://www.redout.net/data/command.html

ちなみに、何故かわからないんですが、シェルスクリプトにすると、うまく動かないのがありますね。。。3D CADファイルのSTL形式からNEC2形式に変換するシェルスクリプトがあるんですが、普通にUbuntu18では動くのですが、Google Colabでは、いろいろとエラーがでます。

!sh ./test.sh

!bash ./test.sh

中には動くスクリプトもあるので。。 やってみないと分からないのですが、IF分の分岐などでおかしくなるみたいです。なぜかな??

File Downloadでエラーが出る

Google Colabにスニペットがあって、File Downloadは、そのままコピペされるんですが。。

from google.colab import files
with open('example.txt', 'w') as f:
  f.write('some content')
files.download('example.txt')

これ、chromeの設定で、サードパーティCookieの設定をオフ、許可サイトに

colab.research.google.com

を加えておかないと、エラーがでます。

chrome://settings/content/cookies

Stackoverflowさまさまです。

Google Driveをマウントすると、ファイルマネージャみたい

前からなんでしょうが。。気づかなかった(笑)

こんな感じで、左のファイルってところに、中身が見えるようになったんですね。前は、Colab Notebooksしか見えなかったように思うんですが。。 便利になっています。