使用带有argparse的“或”输入

时间:2011-10-29 18:51:11

标签: python input argparse

我已经制作了一个快速的python脚本,可以从ASCII转换回Unicode。我通过argparse接受输入,所以它必须包含在引号内,即./Converter.py -a“这是我的朋友”。然后,该脚本将输出逗号分隔的Unicode值。

当然'会打破输入,我知道我可以通过在它前面放一个来逃避';但是,由于某种原因,这会停止添加逗号。例如:

./Convert.py "\"hi\""

输出:

34104, 105, 34

如您所见,应该有一个逗号和34到104之间的空格。这是代码:

def CharCode(text):
    print "Unicode values are:",
    length = len(text) 
    for letter in text: 
            Unicode_values = ord(letter) 
            sys.stdout.write(str(Unicode_values)) 
            if letter != text[-1]: 
                    sys.stdout.write(', ')
    sys.stdout.write('\r\n') 

如果我删除

if letter != text[-1]: 

这可以解决问题,但是在Unicode值字符串的最后添加了一个逗号,我不想这样做。

我的问题是:a)如何防止这种情况发生?和b)有没有更好的方式来接受这种类型的输入,我会更好地设置raw_input吗?

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:3)

你的病情

if letter != text[-1]: 

表示只要最后一个字符不等于最后一个字符的值,就写一个逗号和空格字符 - 在这种情况下,'(您的第一个字符)与'(您的最后一个字符)是相同的字符。您应该更改条件以检查它确实是最后一个字符,而不是该字符与最后一个字符相同。你可以用

做到这一点
for i, letter in enumerate(text):
    #stuff
    if i < len(text) - 1:
        sys.stdout.write(', ')

但更好的方法是使用连接方法:

print u', '.join([str(value) for value in unicode_values])

此外,如果您不想使用引号让shell将您的输入作为一个arg发送给您的脚本,那么argparse有nargs个选项(docs),例如'+'收集尽可能多的args。但是你仍然需要转义你想要的引号,你必须对这些args之间的空格做出假设。 (像' '.join(args)这样的东西只会近似你的输入)