Python parse_args从解析器参数获取所有.png文件
在运行以下(Python parse_args从解析器参数获取所有.png文件,python,windows,python-3.x,argparse,glob,Python,Windows,Python 3.x,Argparse,Glob,在运行以下(test.py)之后,我想得到一个arg.pics,它返回类似['pic1.png','pic2.png','pic3.png'](任意解析.png格式的所有文件): 通过命令行运行脚本并输入 python test.py -p ../User/Desktop/Data/*.png 然后args.pics返回['../User/Desktop/Data/*.png'] 我是否使用了正确的方法?我听说使用*.png将在输入后扩展为.png文件,但我这边的情况似乎不是这样 编辑:如果有
test.py
)之后,我想得到一个arg.pics
,它返回类似['pic1.png','pic2.png','pic3.png']
(任意解析.png格式的所有文件):
通过命令行运行脚本并输入
python test.py -p ../User/Desktop/Data/*.png
然后args.pics
返回['../User/Desktop/Data/*.png']
我是否使用了正确的方法?我听说使用*.png
将在输入后扩展为.png文件,但我这边的情况似乎不是这样
编辑:如果有帮助,我将在Windows 10上使用Anaconda提示符。您的方法是正确的。但是,如果您的shell支持全局绑定,并且模式实际匹配任何文件,则脚本将只接收扩展的文件列表作为参数。否则,在大多数情况下,它将是模式本身
默认情况下,Anaconda命令提示符使用
cmd.exe
,不支持通配符扩展。您可以改为使用,它可以理解通配符。或者,您可以按照Mad Physicast的说明在应用程序中进行扩展。您的方法是正确的。但是,如果您的shell支持全局绑定,并且模式实际匹配任何文件,则脚本将只接收扩展的文件列表作为参数。否则,在大多数情况下,它将是模式本身
默认情况下,Anaconda命令提示符使用
cmd.exe
,不支持通配符扩展。您可以改为使用,它可以理解通配符。或者,您可以在应用程序中进行Mad Physicast’s中描述的扩展。可能会发生一些事情。一种可能是。/User/Desktop/Data/*.png
与任何文件都不匹配,因此无法展开。这只会发生在类UNIX的shell上(我想是PowerShell)。另一种可能是您在Windows上使用的是cmd.exe
,它根本不进行通配符扩展。鉴于您正在Windows上使用Anaconda提示符,我倾向于使用后一种可能性作为解释
因为您要查找文件夹中所有PNG的列表,所以根本不需要依赖shell。在Python中有很多方法可以做同样的事情,包括集成和不集成
让我们从实现列表功能开始。给定一个目录,以下是获取其中所有PNG列表的一些方法:
mydir = '../User/Desktop/Data/'
pngs = glob.glob(os.path.join(mydir, '*.png'))
要递归到子文件夹中,只需添加recursive=True
关键字only选项mydir = '../User/Desktop/Data/'
pngs = []
for path, dirs, files in os.walk(mydir):
pngs.extend(f for f in files if f.lower().endswith('.png'))
del dirs[:]
要启用递归,只需删除行del dirs[:]
,这将抑制子目录搜索ls
或dir
命令:
mydir = '../User/Desktop/Data/'
pngs = [f for f in os.listdir(mydir) if f.lower().endswith('.png')]
此版本不检查某个内容是否为文件。它假定您没有以.png
结尾的文件夹名def list_pngs(directory):
return glob.glob(os.path.join(directory, '*.png'))
现在您已经知道如何列出文件夹中的文件,可以轻松地将其插入任何级别的argparse
。以下是几个例子:
parser.add_argument("-p", "--pics", action='store', help="picture files", required=True)
处理完参数后:
print(list_pngs(args.pics))
argparse
:
parser.add_argument("-p", "--pics", action='store', type=list_pngs, help="picture files", required=True)
现在可以直接使用参数,因为它将直接转换为列表:
print(args.pics)
可能会发生一些事情。一种可能是
。/User/Desktop/Data/*.png
与任何文件都不匹配,因此无法展开。这只会发生在类UNIX的shell上(我想是PowerShell)。另一种可能是您在Windows上使用的是cmd.exe
,它根本不进行通配符扩展。鉴于您正在Windows上使用Anaconda提示符,我倾向于使用后一种可能性作为解释
因为您要查找文件夹中所有PNG的列表,所以根本不需要依赖shell。在Python中有很多方法可以做同样的事情,包括集成和不集成
让我们从实现列表功能开始。给定一个目录,以下是获取其中所有PNG列表的一些方法:
mydir = '../User/Desktop/Data/'
pngs = glob.glob(os.path.join(mydir, '*.png'))
要递归到子文件夹中,只需添加recursive=True
关键字only选项mydir = '../User/Desktop/Data/'
pngs = []
for path, dirs, files in os.walk(mydir):
pngs.extend(f for f in files if f.lower().endswith('.png'))
del dirs[:]
要启用递归,只需删除行del dirs[:]
,这将抑制子目录搜索ls
或dir
命令:
mydir = '../User/Desktop/Data/'
pngs = [f for f in os.listdir(mydir) if f.lower().endswith('.png')]
此版本不检查某个内容是否为文件。它假定您没有以.png
结尾的文件夹名def list_pngs(directory):
return glob.glob(os.path.join(directory, '*.png'))
现在您已经知道如何列出文件夹中的文件,可以轻松地将其插入任何级别的argparse
。以下是几个例子:
parser.add_argument("-p", "--pics", action='store', help="picture files", required=True)
处理完参数后:
print(list_pngs(args.pics))