2017-10-24 14 views
0

私はJupyterでコマンドラインを実行する方法を知っています:!例えば 、2.jpgJupyterでループ端末コマンドを実行する

! python classify.py --filename /Users/images/2.jpg 

process.pyのPythonの質問は、Jupyterセルに( IDX)の繰り返しのようにフォルダのすべてのファイルを処理する方法を、このようなものである画像ファイルを実行します。

for idx in range(10): 
    ! python process.py --filename /Users/images/idx.jpg 

おかげ

PS: 私は、パスを試して動作しませんでした:

for i in range(1,10): 
    cur_path = '/Users/images/'+str(i)+'.jpg' 
    path = os.path.expanduser(cur_path) 
    print(i,path) 
    ! python process.py --filename path 

答えて

1

可能であれば、evalを使用してbashに文字列を実行させることができます。

for idx in range(10): 
    !eval {"python process.py --filename /Users/images/{image}.jpg".format(image=idx)} 
+0

お返事ありがとうございます。あなたのメソッドを試しましたが、このようなエラーが出ます:/ bin/sh:-c:0行目:予期しないトークンの近くで文法エラーが発生しました '( ' /bin/sh:-c:0行目' eval "python process.py --filename /Users/images/{image}.jpg".format(image=idx) '光を分けてもらえますか?何か間違ったことがあります。ありがとう –

+1

@BillAncalagontheblack私が投稿したコードに余分なコロンがありました。 –

+0

ipythonはデフォルトで '!'の後ろにpython文字列を実行しないことに気付きましたので、 '{}'の間にpythonの部分を置く必要があります。 –

0

代わり!globモジュールと、おそらくsubprocessを使用してください。単純なglob.glob("path/*.jpg")はすべての画像を繰り返し処理します。

from glob import glob 
from subprocess import check_call 

for i in glob("/Users/images/*.jpg"): 
    print("Processing:", i) 
    check_call(["python", "process.py", "--filename", i], shell=False) 

使用!またはevalは良いアイデアことはありません - コマンドは黙って失敗することがあります。

0

!は、単に端末で次のコードが実行されることを示します。

したがって、1つのオプションは、文をbashでコーディングすることです。これは、Pythonほど簡単ではありませんが、あなたは、このような同じタスクを実行することができます

! for file in /Users/images/*.jpg; do python process.py --filename /Users/images/$i; done 

それはループ用のPythonのforループだが、ではありません。

また、ソースコードprocess.pyに戻って、ディレクトリ内のファイルをループするように修正することを検討してください。これは、os.listdir機能で簡単に行えます。

関連する問題