通配符 * 未被 python argparse 解释
Wildcard * not interreted by python argparse
我正在尝试编写一个可以获取目录中所有文件并允许用户使用 *
引用多个文件的脚本。
这是我设置解析器以接收输入文件的行:
parser.add_argument('-f', '--files', help='The files to compare.', required=True, nargs='+')
这是错误行
Invalid argument: '.\rmsd\*.xyz'
这是我运行执行脚本的代码
python .\rsmd.py -r .\rmsd.xyz -f .\rmsd\*.xyz
我的目的是让用户使用Windows和Linux中的脚本。
在 Windows 上,python 仅接收 .\rmsd\*.xyz
作为字符串,它不会评估哪些文件与模式匹配。你可以使用例如glob
模块来解析它。
import glob
my_txt_files = glob.glob("*.txt") # returns list of filenames in current directory matching the pattern
# e.g.:
matched_files = glob.glob(arguments.files)
针对平台编辑:
您可以检查是否匹配了多个文件以使其更多platform-independent
import argparse
import glob
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--files', nargs='+')
arguments = parser.parse_args()
matched_files = []
for file in arguments.files:
if glob.escape(file) != file:
# -> There are glob pattern chars in the string
matched_files.extend(glob.glob(file))
else:
matched_files.append(file)
如果你不想在程序中处理它,你可以像这样在Powershell上使用预先扩展启动程序
python rsmd.py -f (get-childitem *.txt)
我正在尝试编写一个可以获取目录中所有文件并允许用户使用 *
引用多个文件的脚本。
这是我设置解析器以接收输入文件的行:
parser.add_argument('-f', '--files', help='The files to compare.', required=True, nargs='+')
这是错误行
Invalid argument: '.\rmsd\*.xyz'
这是我运行执行脚本的代码
python .\rsmd.py -r .\rmsd.xyz -f .\rmsd\*.xyz
我的目的是让用户使用Windows和Linux中的脚本。
在 Windows 上,python 仅接收 .\rmsd\*.xyz
作为字符串,它不会评估哪些文件与模式匹配。你可以使用例如glob
模块来解析它。
import glob
my_txt_files = glob.glob("*.txt") # returns list of filenames in current directory matching the pattern
# e.g.:
matched_files = glob.glob(arguments.files)
针对平台编辑:
您可以检查是否匹配了多个文件以使其更多platform-independent
import argparse
import glob
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--files', nargs='+')
arguments = parser.parse_args()
matched_files = []
for file in arguments.files:
if glob.escape(file) != file:
# -> There are glob pattern chars in the string
matched_files.extend(glob.glob(file))
else:
matched_files.append(file)
如果你不想在程序中处理它,你可以像这样在Powershell上使用预先扩展启动程序
python rsmd.py -f (get-childitem *.txt)