嗨,我正在尝试将argparse用于命令行输入文件名,但我正在努力使其正常工作。
我想取一个从命令行(-d)传递的字符串,该字符串对应于文件名(datbase.csv)并将其存储在变量inputargs.snp_database_location中。
这被视为我的load_search_snaps函数的输入,如下面的代码所示,该功能打开文件并执行内容(伪代码)。
import csv, sys, argparse
parser = argparse.ArgumentParser(description='Search a list of variants against the in house database')
parser.add_argument('-d', '--database',
action='store',
dest='snp_database_location',
type=str,
nargs=1,
help='File location for the in house variant database',
default='Error: Database location must be specified')
inputargs = parser.parse_args()
def load_search_snps(input_file):
with open(input_file, 'r+') as varin:
id_store_dictgroup = csv.DictReader(varin)
#do things with id_store_dictgroup
return result
load_search_snps(inputargs.snp_database_location)
使用bash中的命令:
python3 snp_freq_v1-0_export.py -d snpstocheck.csv
我尝试使用命令行从同一目录传递一个常规CSV文件时会出现以下错误:
文件" snp_freq_v1-0_export.py",第33行,load_search_snps 使用打开(input_file,'r ')作为varin:typeError:无效文件:['snpstocheck.csv']
如果我从脚本内部喂食filepath,它可以很好地工作。据我所知,我得到了一个与文件名字符串相匹配的SNP_Database_Location的字符串,但随后我会收到错误。我错过的是类型错误?
nargs=1
使inputargs.snp_database_location
列表(一个元素),而不是字符串。
In [49]: import argparse
In [50]: parser = argparse.ArgumentParser()
In [51]: parser.add_argument('-d', nargs=1)
Out[51]: _StoreAction(option_strings=['-d'], dest='d', nargs=1, const=None, default=None, type=None, choices=None, help=None, metavar=None)
In [52]: args = parser.parse_args(['-d', 'snpstocheck.csv'])
In [53]: args.d
Out[53]: ['snpstocheck.csv']
要修复,删除nargs=1
。