2013-11-03 20 views
0

我有一個使用popen()函數作爲數組返回stdout的函數。以'u'爲前綴的python數組元素

使用Python3陣列被正確返回,但下蟒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 '']

在哪裏這個'你'來自我如何防止它?

+0

你不會阻止它。當你打印清單時,你會得到內容的表示,而不是價值。 – Matthias

+1

只有部分口頭回答 - 通過切換Python 3.x來防止它!據我所知,關於3.x前Python的最糟糕的事情是字符串的unicode支持。 – rlms

回答

1

u表示字符串是Unicode字符串。這意味着該字符串已經從諸如UTF-8或ISO-8895-1的編碼解碼爲明確的類型。如果你print arr[0]它將被編碼回你的終端沒有u

這將發生在.read().decode()期間。你應該確實通過正確的文件編碼解碼,否則可能會使用一個可能不合適的系統。如果你的文件只包含ASCII字符,那麼你不會看到問題。

它與衆不同的原因是因爲在Python 3中,普通字符串(解碼)始終是Unicode字符串,而字節字符串(來自.read())是一種特殊類型。

如果你真的不想要u,刪除.decode()方法,但你真的不需要。

1

u表示unicode表示打印時它是一個unicode字符串。它不會以任何方式影響陣列內容,並且僅僅是一個指示

1

u'10-000801d5a12d'意味着'10 -000801d5a12d'是一個unicode字符串。

您可以在Python文檔看它here

用途:

str(myString) 

您也可以使用encode如果你需要特定的編碼:

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

u意味着字符串是unicode字符串。 如果你真的想要一個python str,你可以將它轉換這樣的:

str(my_var) 
相關問題