【问题标题】:How to correctly extract python command line args into strings如何正确地将python命令行参数提取到字符串中
【发布时间】:2020-11-10 01:59:03
【问题描述】:

我有以下 python 脚本,它希望将第一个参数作为字符串接收,将其反转然后打印出来

import sys

input = sys.argv[1:]
input_reversed = input[::-1]
print("The input_reversed is: " + input_reversed)

使用python test.py abcdef 之类的调用运行它会出现以下错误:

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    print("The input_reversed is: " + input_reversed)
TypeError: cannot concatenate 'str' and 'list' objects

我哪里错了? sys.argv[1:] 不返回字符串?

我只想调用python test.py abcdef 并获得fedcba 的输出,这是abcdef 的反面。

【问题讨论】:

  • ['one', 'two', 'three'][1:]['two', 'three'] -- 这是一个字符串列表,而不是字符串。
  • 我只想打电话给python test.py abcdef 并得到fedcba的输出
  • 啊!那不是您的代码所做的;它颠倒了参数的顺序,它不会颠倒单个参数的文本。 (因此,如果您只传递一个参数,则该列表根本无法有意义地反转,因此它保持不变。
  • 假设只有一个参数并且len > 1,您可以使用sys.argv[1][::-1]并将其保存为变量。
  • sys.argv[1] 获取字符串中的第一个参数,这就是我想在这里做的。非常感谢!

标签: python command-line-arguments


【解决方案1】:

如果您希望反转每个参数的内容,除了反转参数本身的顺序,将所有参数连接到一个字符串中,然后反转该字符串:

print("The reversed input is: " + ' '.join(sys.argv[1:])[::-1])

注意这里的操作顺序。它可以写成更多的中间步骤:

args_list = sys.argv[1:]
args_string = ' '.join(args_list)
reversed_args_string = args_string[::-1]
print("The reversed input is: " + reversed_args_string)

【讨论】:

    【解决方案2】:

    不,它返回一个列表。您可以使用join() 一起加入一个列表。试试这个:

    print("The input_reversed is: " + ', '.join(input_reversed))
    

    【讨论】:

    • 执行join 会导致输出不反转但保持不变?这是有趣的。你能检查一下这个连接的输出吗?反之亦然。
    • 嗯? ', '.join(['one', 'two', 'three'][::-1]) 是正确的 'three, two, one' -- 反之亦然。
    • 它只会使用您定义的任何分隔符将列表中的项目连接在一起。输出将与您传递给函数的列表的顺序相同。所以如果你使用 ', .join(['a','b','c']) 你会得到结果"a, b, c"
    猜你喜欢
    • 2019-12-24
    • 2014-08-07
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2018-07-21
    相关资源
    最近更新 更多