我已经制作了一个快速的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吗?
非常感谢任何帮助,谢谢!
答案 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)
这样的东西只会近似你的输入)