откройте файл file.txt и сохраните его в переменной, используя argparse - PullRequest
0 голосов
/ 28 марта 2020

как мне открыть файл file.txt и сохранить значение в 2 переменных: namefileone и inputfiletwo, но ошибка продолжает сбивать меня с толку .... даже расположение файла является истинным ... когда я запускаю команду

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

error = с открытым (inputfileone, 'r') в качестве 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 

1 Ответ

1 голос
/ 28 марта 2020

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)
     ....
...