2012-04-04 89 views
0

這裏真的很簡單的問題,但長時間地問我問。代碼如下所示:Python:爲什麼列表導入使用引號,我該如何避免/擺脫它們?

f4 = open("genomekey2.txt", 'rb') 
keyline = f4.readline() 
keygenomes = [] 
for keyline in f4: 
    keygenomes.append(keyline[:-1]) 

的genomekey2.txt文件格式看起來像這樣

['Prochlorococcus marinus str. MIT 9202'] 
['Prochlorococcus marinus str. NATL1A'] 
['Synechococcus sp. RS9917'] 
['Nostoc sp. PCC 7120'] 
['Synechococcus sp. JA-2-3B'a(2-13)'] 

的問題是,當我打印了所有我想要的條目,但周圍引號的genomekey列表列表中找到的每個[]。我想擺脫引號,以便我可以將它與另一個列表進行比較,但迄今尚未找到方法。我試過...

for a in keygenomes: 
    a.replace('"', '') 

但這似乎並不奏效。我寧願一個解決方案,它根本不會添加引號。無論如何,代碼的哪一部分(.append,.readline())負責添加它們?這裏大量的初學者問題,但你們看起來相當不錯。

編輯:我最終想將它與被格式化爲這樣

[「節旋極大CS-328」列表],['馬裏努斯海峽進行比較。 MIT 9301'],['Synechococcus sp。 CC9605'],['Synechococcus sp。 WH 5701'],['Synechococcus sp。 CB0205'],['Prochlorococcus marinus str。 MIT 9313'],['Synechococcus sp。 JA-3-3Ab'],['Trichodesmium erythraeum IMS101'],['Synechococcus sp。 PCC 7335'],['Trichodesmium erythraeum IMS101'],...

編輯:所以我覺得我有一些工作的答案組合,謝謝大家的幫助!引用干擾了列表比較,所以我只是將它們添加到第一個列表中,儘管我認爲它只是模仿作爲字符串輸入的列表(現在我認爲我理解這個區別),它似乎工作正常

f4 = open("genomekey2.txt", 'rb') 
keyline = f4.readline() 
keygenomes = [] 
for keyline in f4: 
    keygenomes.append(keyline[:-1]) 

specieslist = " ".join(["%s" % el for el in specieslist]) 

nonconservedlist = [i for i in keygenomes if i not in specieslist] 

編輯:是的上述工作,但更優雅的解決方案,我發現這裏(http://forums.devshed.com/python-programming-11/convert-string-to-list-71857.html)理解這個問題更好感謝你的球員的幫助後是這樣的:

for keyline in f4: 
    keyline = eval(keyline) 
    keygenomes.append(keyline) 

謝謝!

+1

[Python的?:打印不帶括號和單引號的列表]的可能重複(http://stackoverflow.com/questions/5750042/python-printing-a-list-沒有括號和單引號) – geoffspear 2012-04-04 16:09:41

+0

如果你確定輸入文件的每一行都是格式:['...'],那麼你應該能夠從字符[2: -2],我認爲它是在Python中。 – 2012-04-04 16:12:04

+0

我不認爲這是完全相同的問題? – cc211 2012-04-04 16:12:40

回答

2

根據你想你的清單比較一下,好像你是想列出的清單,而不是一個字符串列表....也許這個?

f4 = open("genomekey2.txt", 'rb') 
keygenomes = [] 
for keyline in f4.readlines(): 
    if keyline: 
     keygenomes.append(eval(keyline.strip())) 

你將不得不問題進行行的行這樣的:

['Synechococcus sp. JA-2-3B'a(2-13)'] 

的引號不正確的,這將打破EVAL。是否可以混合報價?像這樣的,而不是...

["Synechococcus sp. JA-2-3B'a(2-13)"] 
+0

沒有看到這個!這是我回來並已經進行編輯。我只會手動編輯那些「我認爲是這樣」的那些少數物種。 – cc211 2012-04-05 08:48:54

1

一個快速和骯髒的解決方案是跳過行的前兩個和最後兩個字符

f4 = open("genomekey2.txt", 'rb') 
keyline = f4.readline() 
keygenomes = [] 
for keyline in f4: 
    # CHANGE HERE 
    keygenomes.append(keyline[2:-2]) 

以其他方式使用一個正則表達式像

g = re.match(("^\['(?P<value>.*)'\]"), "['Synechococcus sp. JA-2-3B'a(2-13)']") 
g.group(1) 
"Synechococcus sp. JA-2-3B'a(2-13)" 
+0

快速和骯髒的解決方案並沒有帶走它帶走其他字符的引號,這是什麼在 – cc211 2012-04-04 16:13:40

+1

@ cc211之前拋出我:哪些引號是你想擺脫的?我認爲你將python列表對象與一列字符串混淆在一起,這些字符串看起來像Python中列表對象的__repr__。 – 2012-04-04 17:11:27

+0

@ cc211:你可以編輯你的問題,以顯示你想要的輸出看起來如何?最好在python解釋器提示符下。 – 2012-04-04 17:13:04

1

a.replace(...)返回修改後的字符串,它不」 t修改a

因此,您需要實際替換數組中的條目,或者在將它們放入數組之前對其進行修復。

keygenomes = [ a.replace('"', '') for a in keygenomes ] 

編輯:

我覺得我還沒有看過的問題不夠仔細 - 的"來當你打印一個字符串 - 這不是字符串本身的一部分。

+0

即使有了這樣的代碼,我仍然得到相同的輸出[「['Prochlorococcus marinus str。NATL1A']」,['Synechococcus sp。RS9917']「,'['Nostoc sp.PCC 7120']」 ,「['Synechococcus sp.JA-2-3B'a(2-13)']」, 與 f4 = open(「genomekey2.2.txt」,'rb') keyline = f4。的ReadLine() keygenomes = [] 爲關鍵線在F4: keygenomes.append(關鍵線[: - 1]) keygenomes = 打印keygenomes [用於在keygenomes a.replace( '「', '')] 我做錯了哪一點? – cc211 2012-04-04 17:16:00

+0

@ cc211我認爲我沒有仔細閱讀這個問題 - 「當你打印一個字符串時 - 它不是字符串本身的一部分。 – 2012-04-04 21:53:47

0

您的replace正在使用錯誤的字符串;你試圖刪除單引號,但你的字符串是雙引號。由於字符串不可變,所以替換不在位,你必須使用返回值。

keygenomes.append(keyline[:-1].replace("'", "")) 
+0

所以稍微可怕的是,我剛剛添加了一些東西到編輯中,我比較它需要單引號內的[],我認爲我的上述建議得到的輸出是'[Cyanothece sp。 PCC 7822]','[Oscillatoria sp。 PCC 6506]','Cylindrospermopsis raciborskii CS-505','[Nostoc azollae 0708]','[Synechococcus sp。 WH 7805]'] – cc211 2012-04-04 16:20:15

0

嘗試類似的東西:

keygenomes = [] 
f4 = open("genomekey2.txt", 'rb') 
keyline = f4.readline() 
for keyline in f4: 
    keyline = keyline.strip() 
    if keyline and keyline.startswith("['") and keyline.endswith("']"): 
     keygenomes.append(keyline[2:-2]) 
+0

這使得我離目前的輸出最近,但我仍然得到 ['Prochlorococcus marinus str。 NATL1A','Synechococcus sp。 RS9917','髮菜屬sp。 PCC 7120',「Synechococcus sp.JA-2-3B'a(2-13)」,「Synechococcus sp。 RS9916','Prochlorococcus marinus str。 AS9601', 當理想情況下會有 [['Prochlorococcus marinus str。 NATL1A'],['Synechococcus sp。 RS9917'],['髮菜屬sp。 PCC 7120'],[「Synechococcus sp.JA-2-3B'a(2-13)」],['Synechococcus sp。 RS9916'],['Prochlorococcus marinus str。 AS9601']等 – cc211 2012-04-04 17:04:40

相關問題