![](/img/trans.png)
[英]While editing a line of text in python, how do i avoid editing a specific part of text in quotation marks?
[英]Python: Why does list import using quotation marks, how can I avoid this/get rid of them?
这里的问题非常简单,但困扰我足够长的时间来问。 代码如下所示:
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。 MIT 9301'], ['Synechococcus sp. CC9605'], ['Synechococcus sp. WH 5701'], ['Synechococcus sp. CB0205'], ['Prochlorococcus marinus 海峡。 MIT 9313'], ['Synechococcus sp. JA-3-3Ab'], ['红毛霉 IMS101'], ['Synechococcus sp. PCC 7335'], ['红毛霉 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)
谢谢!
根据您想将列表与之进行比较的内容,您似乎想要一个列表列表而不是一个字符串列表……也许是这个?
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)']
引号不正确,它会破坏评估。 是否可以混合引号? 而是像这样...
["Synechococcus sp. JA-2-3B'a(2-13)"]
一个快速而肮脏的解决方案是跳过该行的前两个和最后两个字符
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)"
a.replace(...)
返回修改后的字符串,它不会修改a
。
因此,您需要实际替换数组中的条目,或者在将它们放入数组之前修复它们。
keygenomes = [ a.replace('"', '') for a in keygenomes ]
编辑:
我想我没有足够仔细地阅读这个问题 - 当你打印一个字符串时"
出现 - 它不是字符串本身的一部分。
您的replace
使用了错误的字符串; 您正在尝试删除单引号,但您的字符串是双引号。 替换也不是就地,因为字符串是不可变的,你必须使用返回值。
keygenomes.append(keyline[:-1].replace("'", ""))
尝试这样的事情:
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])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.