如何使用Argparse模块在Python脚本中传递文件作为参数并对其进行修改?



我的要求是从命令行界面读取文本文件,获取其中的数据&在以后的代码中使用它。但是,我做不到。如果我使用line1,那么它抛出error1如果第1行被注释,它抛出error2

我也尝试过args。文件在line1.

你能帮我把文件作为输入,用文件方法修改吗?

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("file", type=argparse.FileType('rt'))
args = parser.parse_args()
#f = open("file", "r") ---line1
lines = file.readlines()
file.close()
print(lines[0].rstrip('n'))
print(lines[1])

错误1:

py parser.py demo.txt
Traceback (most recent call last):
File "C:UsersnthotapalliPycharmProjectspythonProjectparser.py", line 6, in <module>
f = open("file", "r")
FileNotFoundError: [Errno 2] No such file or directory: 'file'

错误2:

py parser.py demo.txt
Traceback (most recent call last):
File "C:UsersnthotapalliPycharmProjectspythonProjectparser.py", line 9, in <module>
lines = file.readlines()
AttributeError: 'str' object has no attribute 'readlines'

要调用readlines(),您需要有file like object

要有一个file like object,你需要调用open(<filename>)

在你的例子中应该是:

file = open(args.file)
lines = file.readlines()

或使用上下文管理器:

with open(args.file) as file:
lines = file.readlines()

传递文件的路径作为参数,然后打开它,这样您就可以访问对象的方法。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-f", "--file", help="File path", default="/tmp/file.txt")
args = parser.parse_args()
file = open(args.file, "r")
lines = file.readlines()
print(f"Number of lines: {len(lines)}")
print(f"Fist line: {lines[0]}")

args是解析器生成的名称空间。您需要从中获取值,而不是使用字符串"文件"或未初始化的变量file。第二,要知道FileType产生了什么。

parser = argparse.ArgumentParser()
parser.add_argument("file", type=argparse.FileType('rt'))
args = parser.parse_args()

添加
print(args)   # to see what the parser found
file = args.file   # 

那么你可以这样做:

lines = file.readlines()
file.close()

问题:

f = open("file", "r")

表示您正在尝试打开一个名为"文件"的文件。

对于FileType,args.file将是一个已经打开的文件,然后您可以读取和关闭它。不需要进一步的open,甚至不可能。

或者你可以定义:

parser.add_argument("file")

在这种情况下,args.file将是一个字符串,您可以在open

中使用它。
file = open(args.file)

或者更好的

with open(args.file) as file:
lines = file.readlines()

最新更新