Python 八进制字符串文字和八进制命令行参数

Python 八进制字符串文字和八进制命令行参数,python,python-3.x,Python,Python 3.x,我有一个八进制字符串“\334\n\226”(\n不是八进制,因为它有一个可打印的ASCII表示)。我想在字节数组中对其进行编码,因此我想转换“\334\n\226”->[\334\n\226]->[220,10150]。我想写以下代码: octal_string = "\334\n\226" encoded_string = octal_string.encode() for b in encoded_string: print(b) 这将产生: 195 156 10 194 一百五十

我有一个八进制字符串
“\334\n\226”
\n
不是八进制,因为它有一个可打印的ASCII表示)。我想在字节数组中对其进行编码,因此我想转换
“\334\n\226”
->
[\334\n\226]
->
[220,10150]
。我想写以下代码:

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

195 156 10 194 一百五十

此外,我希望将此字符串作为命令行参数传递给脚本,因此如果我编写脚本:

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
我得到:

五十一 51 52 110 50 50 54


我该怎么做呢?

您可以使用正则表达式,或者将此代码与列表理解、split()和int()方法结合使用:

引号很重要:

$ 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]

据我所知,您希望输出为
22010150
。你能用正则表达式吗?你试过用拉丁语编码吗?@Benjy Kessler我已经编辑了下面的代码。你的问题是什么?这在一般情况下不起作用:假设“\340\ne\002”,那么e应该被解析为101,因为ASCII中的e是101。不需要从头开始实施。我认为这些应该是有效的字符串文字(请参阅\334应该是有效字符)
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]