以'u'为前缀的python数组元素

时间:2013-11-03 12:08:32

标签: python

我有一个使用popen()的函数,它将stdout作为数组返回。

使用Python3正确返回数组,但在python 2.7下,每个元素都以' u'

为前缀
def exe(cmd):
    from subprocess import Popen, PIPE, STDOUT
    p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
    arr = p.stdout.read().decode().split("\n")
    print(arr)
    del arr[-1]
    if(arr[0]=='not found.'): arr = [];
    return arr

[u' 10-000801d5a12d',u'']

这是' u'来自,我该如何预防?

4 个答案:

答案 0 :(得分:1)

u代表unicode,表示打印时它是一个unicode字符串。它不会以任何方式影响数组内容,仅仅是一个指示

答案 1 :(得分:1)

u'10-000801d5a12d'表示'10 -000801d5a12d'是unicode字符串。

你可以在python docs

看到它here

使用:

str(myString)

如果您需要特定的编码,也可以使用encode

"myString".encode('utf-8')

答案 2 :(得分:1)

u表示字符串是Unicode字符串。这意味着字符串已从编码(例如UTF-8或ISO-8895-1)解码为明确类型。如果您print arr[0],则会在没有u的情况下将其编码回您的终端。

这可能发生在.read().decode()期间。您应该通过正确的文件编码来解码,否则可能会使用可能不合适的系统。如果您的文件只包含ASCII字符,那么您将看不到问题。

之所以不同,是因为在Python 3中,普通字符串(已解码)始终是Unicode字符串,而字节字符串(来自.read())是一种特殊类型。

如果你真的不想要u,请删除.decode()方法,但实际上并不需要。

答案 3 :(得分:0)

u表示字符串是unicode字符串。 如果你真的想要一个python str,你可以这样投射:

str(my_var)