我的要求是从命令行界面读取文本文件,获取其中的数据&在以后的代码中使用它。但是,我做不到。如果我使用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()