我试图通过编写一个简单的脚本来练习python脚本,该脚本将采用名为A_B的大量文件并将它们写入B \ A位置。我将参数传递给文件的方式是
python script.py *
我的程序看起来像
from sys import argv
import os
import ntpath
import shutil
script, filename = argv
target = open(filename)
outfilename = target.name.split('_')
outpath=outfilename[1]
outpath+="/"
outpath+=outfilename[0]
if not os.path.exists(outfilename[1]):
os.makedirs(outfilename[1])
shutil.copyfile(target.name, outpath)
target.close()
问题在于,此脚本的当前编写方式设置为一次只接受1个文件。最初我希望通配符一次将一个文件传递给脚本,然后每次都执行脚本。
我的问题包括两种情况:
和
答案 0 :(得分:3)
您有两个选项,两个选项都涉及循环。
要逐个传递文件,请使用shell循环:
Foreground
这将为匹配glob for file in *; do python script.py "$file"; done
的每个文件调用一次脚本。
要处理脚本中的多个文件,请改为使用循环:
*
然后从像from sys import argv
for filename in argv[1:]:
# rest of script
这样的bash调用脚本,将所有文件作为参数传递。 python script.py *
是一个数组切片,它返回一个列表,其中包含argv[1:]
中从位置1开始到数组末尾的元素。
我建议使用后一种方法,因为这意味着您只调用脚本的一个实例。