我想用argparse打开文件进行阅读。 在cmd中,它必须如下所示:my_program.py / filepath
这是我的尝试:
parser = argparse.ArgumentParser()
parser.add_argument('file', type = file)
args = parser.parse_args()
答案 0 :(得分:159)
查看文档:{{3}}
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('file', type=argparse.FileType('r'))
args = parser.parse_args()
print args.file.readlines()
答案 1 :(得分:57)
参数的类型应该是string(无论如何都是默认值)。所以就这样:
parser = argparse.ArgumentParser()
parser.add_argument('filename')
args = parser.parse_args()
with open(args.filename) as file:
# do stuff here
答案 2 :(得分:21)
为了正常关闭文件,您可以将argparse.FileType与"和"结合使用。声明
# ....
parser.add_argument('file', type=argparse.FileType('r'))
args = parser.parse_args()
with args.file as file:
print file.read()
---更新---
哦,@Wernight在评论中已经说过了
答案 3 :(得分:2)
我将仅添加使用pathlib
的选项:
import argparse, pathlib
parser = argparse.ArgumentParser()
parser.add_argument('file', type=pathlib.Path)
args = parser.parse_args()
with args.file.open('r') as file:
print(file.read())
答案 4 :(得分:0)
parser.add_argument(
'-f', '--file',
help='JSON input file',
type=argparse.FileType('r'),
)
用于重新格式化 JSON 文件的简单命令行脚本
reformat-json \
-f package.json \
--indent=2 \
--sort-keys \
--output=sorted_package.json
可以是Python中的代码如下
#!/usr/bin/env python3
import argparse, json, sys
EXIT_SUCCESS = 0
EXIT_FAILURE = 1
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
'-f', '--file',
help='JSON input file',
type=argparse.FileType('r'),
)
parser.add_argument(
'-i', '--indent',
help='Non-negative integer indent level',
type=int
)
parser.add_argument(
'-o', '--output',
help='Write JSON into output file',
type=argparse.FileType('w'),
)
parser.add_argument(
'-s', '--sort-keys',
action='store_true',
help='Sort output JSON by keys',
)
args = parser.parse_args()
if not args.file:
parser.print_usage()
return sys.exit(EXIT_FAILURE)
gson = json.dumps(
json.load(args.file),
indent=args.indent,
sort_keys=args.sort_keys
)
args.file.close()
if args.output:
args.output.write(gson)
args.output.write('\n')
args.output.close()
else:
print(gson)
return sys.exit(EXIT_SUCCESS)
if __name__ == '__main__':
main()
答案 5 :(得分:-1)
此实现允许“文件名”参数是可选的,并在用户输入-h
或--help
参数时提供简短描述。
parser = argparse.ArgumentParser(description='Foo is a program that does things')
parser.add_argument('filename', nargs='?')
args = parser.parse_args()
if args.filename is not None:
print('The file name is {}'.format(args.filename))
else:
print('Oh well ; No args, no problems')