2012-04-04 90 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

相关问题