这里真的很简单的问题,但是问我很长时间。代码如下所示:
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)']
问题是当我打印基因组密钥列表时,它具有我想要的所有条目,但在列表中找到的每个[]周围都有引号。我想摆脱引号,所以我可以将它与另一个列表进行比较,但到目前为止还没有找到方法。我试过......
for a in keygenomes:
a.replace('"', '')
但这似乎不起作用。我宁愿一个解决方案,它根本不添加引号。无论如何它们是什么以及代码的哪一部分(.append,.readline())负责添加它们?这里有大量的初学者问题,但你们看起来还不错。
编辑:我最终想将它与格式化为
的列表进行比较[['Arthrospira maxima CS-328'],['Prochlorococcus marinus str。麻省理工学院9301'],['Synechococcus sp。 CC9605'],['Synechococcus sp。 WH 5701'],['Synechococcus sp。 CB0205'],['Prochlorococcus marinus str。麻省理工学院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)
谢谢!
答案 0 :(得分: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)"]
答案 1 :(得分: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)"
答案 2 :(得分:1)
a.replace(...)
返回修改后的字符串,不会修改a
。
因此,您需要实际替换数组中的条目,或者在将它们放入数组之前修复它们。
keygenomes = [ a.replace('"', '') for a in keygenomes ]
编辑:
我想我没有仔细阅读这个问题 - 当你打印一个字符串时"
来了 - 它不是字符串本身的一部分。
答案 3 :(得分:0)
你的replace
使用了错误的字符串;你试图删除单引号,但你的字符串是双引号。此外,替换不是就地,因为字符串不可变,您必须使用返回值。
keygenomes.append(keyline[:-1].replace("'", ""))
答案 4 :(得分: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])