我有一个八进制字符串"\334\n\226"(因为它有一个可打印的ASCII表示,\n不是八进制的)。我想将其编码为字节数组,所以我想转换"\334\n\226">[\334, \n, \226]>[220, 10, 150]。我想写下面的代码:

octal_string = "\334\n\226"
encoded_string = octal_string.encode()
for b in encoded_string:
  print(b)

这将输出:
一百九十五
一百五十六

一百九十四
一百五十
此外,我希望将此字符串作为命令行参数传递给脚本,因此如果编写脚本:
import sys

octal_string = sys.argv[1]
encoded_string = octal_string.encode()
for b in encoded_string:
  print(b)

然后我跑:
> python3 myscript.py \334\n\226

我得到:
五十一
五十一
五十二
一百一十
五十
五十
五十四
我该怎么做?

最佳答案

您可以将regex或此代码与list comprehension、split()和int()方法一起使用:

import sys

if len(sys.argv) == 2:

    s=sys.argv[1]
    print(s)
    print(s.split("\\"))
    rslt=[ 10 if e=="n" else int(e,8) for e in s.split("\\") if e ]
    print(rslt)

引号很重要:
$ python3 myscript.py "\334\n\226"
\334\n\226
['', '334', 'n', '226']
[220, 10, 150]

编辑:
在Python3中,此代码起作用:
b= bytes(sys.argv[1],"utf8")
print(b)
#rslt= [ ord(c) for c in str(b,"unicode-escape") ]
rslt= [ ord(c) for c in b.decode("unicode-escape") ]
print(rslt)

b'\\334\\ne\\226'
[220, 10, 101, 150]

编辑2:
import ast

s= ast.literal_eval("'"+sys.argv[1]+"'")  # It interprets the escape sequences,too.
print( [ord(c) for c in s ] )

[220, 10, 101, 150]

关于python - 八进制字符串文字和八进制命令行参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53578483/

10-12 12:57