2

我制作了一个快速的 python 脚本,可以从 ASCII 转换为 Unicode 并返回。我通过 argparse 接受输入,因此它必须包含在引号内,即 ./Converter.py -a "there's my friend"。然后该脚本将输出逗号分隔的 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 吗?

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

4

1 回答 1

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)只会近似您的输入)

于 2011-10-29T19:02:36.707 回答