简述
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代码编写
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()
fnc
是一个接受字符串并返回所需对象或引发错误的函数,则type = fnc
有效。Python中没有file
函数,因此type=open
有效,因为有一个Python函数open(filename)
。argparse提供了一个更好的函数argparse.FileType()
(实际上是一个函数构造器)。但是像wim
的答案中那样使用简单的字符串参数是更好的起点。 - hpauljtype=file
在 Python2.7 (以及更早版本)中可用。但在 Python3 中,file
已被删除。https://dev59.com/4XVD5IYBdhLWcg3wBm1h - hpaulj