我知道如何在Jupyter中运行命令行:使用!
例如,在Python 2.jpg
process.py
! python classify.py --filename /Users/images/2.jpg
问题是,如何在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
答案 0 :(得分:2)
可能的hackish解决方案可能是使用eval
并让bash执行一个字符串。
for idx in range(10):
!eval {"python process.py --filename /Users/images/{image}.jpg".format(image=idx)}
答案 1 :(得分:1)
不需要子进程或格式。简单的事情:
for idx in range(10):
!python process.py --filename /Users/images/{idx}.jpg
适合我。
答案 2 :(得分: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
绝不是一个好主意 - 命令可能会无声地失败。
答案 3 :(得分:0)
!
只表示将在终端中执行以下代码。
所以一个选项只是用bash编写你的语句。它不像Python那么容易,但你可以完成同样的任务:
! for file in /Users/images/*.jpg; do python process.py --filename /Users/images/$i; done
这是一个for循环,但不是Python for循环。
或者,考虑回到process.py
的源代码并对其进行修改,以便循环遍历目录中的文件。使用os.listdir
函数可以轻松完成此操作。
答案 4 :(得分:0)
您可以在 Colab 笔记本中使用 bash for 循环:
!for file in /Users/images/*.jpg; \
do python process.py --filename $file; \
done