如何将输入文件作为参数提供并在 Python 中读取?

How to give an input-file as argument an read it in Python?

我正在尝试使用 argparse 在 Python 中将输入文件作为参数提供,但不知何故,我遇到了错误。

这是我的代码:

from argparse import ArgumentParser

def main():
    args = arg_parser.parse_args()
    print('in main, args = ',args)
    input_file = args.input_file
    update_file_input(input_file)

if __name__ == '__main__':
    import argparse

    parser = argparse.ArgumentParser(description="less script")
    parser.add_argument('--input_file', required=True, help="input file containing IDs and attributes to change (csv)")
    args = parser.parse_args()
    print('args is: ',args)
    main()

我正在从命令行使用以下命令调用脚本:

python updaterScript.py --input_file myCSVFile.csv

我在这里做错了什么?为什么我会收到错误消息?

这是错误:

Traceback (most recent call last):
  File "/home/ProjectP/runtime/bin/updaterScript.py", line 11, in <module>
    load_entry_point('ProjectP==1.0', 'console_scripts', 'updaterScript.py')()
  File "/home/ProjectP/runtime/lib/python3.6/site-packages/ProjectP/updaterScript.py", line 10
0, in main
    args = arg_parser.parse_args()

NameError: 名称 'arg_parser' 未定义

好吧,您的 args 实际上是 arg_parser.parse_args() 未定义。您是否从某处进口或拥有 arg_parser? 你能调试看看 arg_parser.parse_args() returns?

好吧,根据您的代码, 无法识别 arg_parse。 您没有在(看到的)代码的任何时候导入或初始化它。 我不明白你想在那里做什么。 你从哪里想出 arg_parse 的?

不需要在两个地方调用parse_args()。调用一次,然后将结果作为参数传递给main()

def main(args):
    print('in main, args = ',args)
    input_file = args.input_file
    update_file_input(input_file)

if __name__ == '__main__':
    import argparse

    parser = argparse.ArgumentParser(description="less script")
    parser.add_argument('--input_file', required=True, help="input file containing IDs and attributes to change (csv)")
    args = parser.parse_args()
    print('args is: ',args)
    main(args)

我认为没有理由在 main()if 块之间拆分代码。我会把它全部放在一个地方,然后将 import 移到文件的顶部。

import argparse

def main():
    parser = argparse.ArgumentParser(description="less script")
    parser.add_argument('--input_file', required=True, help="input file containing IDs and attributes to change (csv)")
    args = parser.parse_args()
    print('args is: ',args)

    input_file = args.input_file
    update_file_input(input_file)

if __name__ == '__main__':
    main()