我正在尝试使用argparse提供TXT文件,然后在函数中打开它。 你能告诉我它为什么说:错误:无法识别的参数:dataBase.txt (ps:dataBase是我试图打开的文件)
更新(1) 我的主要:
if __name__ =='__main__':
parser=argparse.ArgumentParser()
parser.add_argument("file_name",type= argparse.FileType,help="name of file with network")
args=parser.parse_args()
z=args.file_name
names,network= loadNetwork()
我职能的一小部分:
def loadNetwork():
fileName=open('z', 'r')
name = fileName.readlines()
答案 0 :(得分:2)
我认为这是因为file
不是Python3中argparse的有效类型。 type
参数采用可调用方式,并且由于Python3中不存在file
,因此会抛出错误。请尝试使用FileType。
parser = argparse.ArgumentParser()
parser.add_argument("file_name", type=argparse.FileType("r"), help="name of file with network")
答案 1 :(得分:0)
粗略地说,我认为你的代码看起来如何:
def loadNetwork(afile):
name = afile.readlines()
return name
if __name__ =='__main__':
parser=argparse.ArgumentParser()
parser.add_argument("file",type= argparse.FileType('r'),
help="name of file with network")
# FileType opens the file you specified;
# so you don't need to open it
args = parser.parse_args()
names,network = loadNetwork(args.file)
args.file.close()
将argparse
设置的值作为参数传递给函数是一个好主意,而不是设置全局变量。
但是,如果您更愿意自己打开和关闭文件,我建议:
def loadNetwork(filename):
with open(filename) as f:
name = f.readlines()
return name
if __name__ =='__main__':
parser=argparse.ArgumentParser()
parser.add_argument("filename", help="name of file with network")
args = parser.parse_args()
names,network = loadNetwork(args.filename)
with
语句打开并关闭文件。如果文件名不有效,则argparse
不会发出错误消息。但是with open
会。此外,我也不接受'-'
作为文件名(FileType
将其视为sys.stdin
)。