【问题标题】:open file.txt and store into variable using argparse打开 file.txt 并使用 argparse 存储到变量中
【发布时间】:2020-03-28 20:40:00
【问题描述】:

我如何打开 file.txt 并将值存储到 2 个变量名称 inputfileone 和 inputfiletwo 但错误让我感到困惑....即使文件位置是真的...当我运行命令时

python task.py -f fileone.txt -t filetwo.txt

error = with open(inputfileone, 'r') as fileone: FileNotFoundError: [Errno 2] 没有这样的文件或目录:''

下面是我的代码...

import argparse

#read file from var inputfileone argparse
with open(inputfileone, 'r') as fileone:
      for line in fileone: 
          .....

#read file from var inputfiletwo argparse   
with open(inputfiletwo, 'r') as filetwo:
      for line in filetwo: 


parser = argparse.ArgumentParser()
parser.add_argument("-f","-inputfile1", type=argparse.FileType('r'), help = "file one")
parser.add_argument("-t","-inputfile2", type=argparse.FileType('r'), help = "file two")
args = parser.parse_args()

inputfileone = args.inputfile1 #store value to 'with open(inputfileone, 'r') as fileone:'
inputfiletwo = args.inputfile2 

【问题讨论】:

  • 您声明inputfileone="",然后尝试打开它,这意味着您正在打开一个不存在的空文件。将 with open 语句移到末尾。
  • @rassar 当我删除 inputfileone = "" 和 inputfiletwo = "" 时。使用 open(inputfileone, 'r') as fileone 时出错:NameError: name 'inputfileone' is not defined
  • 保留inputfileone="" 语句。将with open(inputfileone, 'r') as fileone: 语句移到inputfiletwo = args.inputfile2 之后。
  • 使用FileType 时,解析器会为您打开文件。您不应尝试使用open(inputfileone) 再次打开它。但是,如果您希望完全控制打开(在 with 上下文中),请不要使用FileType;只接受一个文件名字符串。
  • 等到parse_args()之后使用该文件;

标签: python file input argparse


【解决方案1】:

FileType为你打开文件;不要再试了:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-f","-inputfile1", type=argparse.FileType('r'), help = "file one")
parser.add_argument("-t","-inputfile2", type=argparse.FileType('r'), help = "file two")
args = parser.parse_args()

inputfileone = args.inputfile1   # file is already open
inputfiletwo = args.inputfile2 

#read file from var inputfileone
for line in fileone: 
          .....

替代方案:

parser = argparse.ArgumentParser()
parser.add_argument("-f","-inputfile1", help = "file one")
parser.add_argument("-t","-inputfile2", help = "file two")
args = parser.parse_args()

inputfileone = args.inputfile1   # plain filename
inputfiletwo = args.inputfile2 

#read file from var inputfileone
with open(inputfileone, 'r') as fileone:
     for line in fileone: 
         .....

在这两种情况下,请等到parse_args 之后使用inputfileone 变量。

====

更好的脚本组织:

import argparse

def read_file1(filename):
    with  open(filename) as f:
        ...
def create_parser():
     parser = argparse.ArgumentParser()
     parser.add_argument("-f","--inputfile1")
     ...
     return parser           

if __name__ == '__main__':
     parser = create_parser()
     args = parser.parse_args()
     filename1 = args.inputfile1
     read_file1(filename1)
     ....

【讨论】:

    猜你喜欢
    • 2019-09-09
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    相关资源
    最近更新 更多