【问题标题】:Editing text file through command line argument in Python在 Python 中通过命令行参数编辑文本文件
【发布时间】:2012-08-09 23:05:06
【问题描述】:

我想通过 Python 中的命令行参数传递整数来编辑文本文件。但是我的代码不起作用,有人可以指出我错在哪里。

    import sys, argparse
    def main(argv=None):
    if argv is None:
        argv=sys.argv[1:]
        p = argparse.ArgumentParser(description="Editing omnetpp.ini")
        p.add_argument('arg1', action='store', default= 1, type=int, help="number of clients")
        args = p.parse_args(argv)
        n = args.arg1
        f = open('C:\\Users\Abcd\Desktop\Omnet\omnetpp.ini', 'a')
        for i in range(n):
            f.write('*.voipClient['+str(i)+'].udpApp['+str(i)+'].destAddresses = "voipGateway"\n')
            f.write('*.voipGateway.udpApp['+str(i)+'].destAddresses   = "voipClient['+str(i)+']"\n')
        f.close()

如果整数 5 通过命令行参数传递,那么它应该在文本文件中添加以下行,这不会发生 输出

*.voipClient[0].udpApp[0].destAddresses = "voipGateway"
*.voipGateway.udpApp[0].destAddresses   = "voipClient[0]"
*.voipClient[1].udpApp[1].destAddresses = "voipGateway"
*.voipGateway.udpApp[1].destAddresses   = "voipClient[1]"
*.voipClient[2].udpApp[2].destAddresses = "voipGateway"
*.voipGateway.udpApp[2].destAddresses   = "voipClient[2]"
*.voipClient[3].udpApp[3].destAddresses = "voipGateway"
*.voipGateway.udpApp[3].destAddresses   = "voipClient[3]"
*.voipClient[4].udpApp[4].destAddresses = "voipGateway"
*.voipGateway.udpApp[4].destAddresses   = "voipClient[4]"

我正在执行以下步骤:

  1. 代码保存在test.py中
  2. 从命令行 C:\Users\Abcd\Desktop>python test.py 5

【问题讨论】:

  • 如果这就是模块的全部代码,我可以指出您实际上并没有运行函数 main。它已定义但未被调用。在函数定义之后在模块级别添加函数调用:main()。
  • my code is not working:为什么?它做了什么(不)做它应该做的事情?
  • 真的要在每次迭代中关闭文件吗?
  • 不不需要在每次迭代中关闭文件,但是在文件中写入行后如何退出?
  • 我已经完成了更改,但我仍然无法找到解决方案

标签: python command-line-arguments


【解决方案1】:

不要在循环中关闭文件,一旦关闭就无法再写入(事实上,如果尝试写入已关闭的文件对象,应该会抛出错误)。 相反,在循环之后关闭它。 此外,要将每个句子放在新行上,请以换行符 \n 结束字符串(类似于按“ENTER”)。

f = open('C:\\Users\Abcd\Desktop\Omnet\omnetpp.ini', 'a')
for i in range(n):
    f.write('*.voipClient['+str(i)+'].udpApp['+str(i)+'].destAddresses = "voipGateway"\n')
    f.write('*.voipGateway.udpApp['+str(i)+'].destAddresses   = "voipClient['+str(i)+']"\n')
f.close()

编辑

顺便说一句,正如 Rostyslav Dzinko 在 cmets 中所说,您定义代码的方式不是定义主函数的方式。事实上,试试这样的方法(另见this SO question):

if __name__ == '__main__':
    p = argparse.ArgumentParser(description="Editing omnetpp.ini")
    p.add_argument('arg1', action='store', default= 1, type=int, help="number of clients")
    args = p.parse_args()

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2019-10-05
    • 1970-01-01
    • 2017-09-16
    相关资源
    最近更新 更多