我有一个文本文件,我想根据变量 site
从中提取某个字符串,该变量表示某个字符的位置。我想提取 site
位置前后 20 个字符。
如果 site
的值超过 20,我的代码可以正常工作。但如果 site
之前的字符少于 20 个,则它不会返回任何内容。
例如,我这里有一个字符串,其中 site=5
在本例中为 K
。
MSGRGKGGKGLGKGGAKRHRKVLRDXYZX
现在我正在尝试提取字符K
前后的20个字符。
下面是我的代码;
data=myfile.read()
str1 = data[site:site+1+20]
temp = data[site-20:site]
final_sequence = temp+str1
print final_sequence
这给了我一个 KGGKGLGKGGAKRHRKVLRDX
的输出。由于找不到 K
之前的 20 个字符,因此它没有打印 K
之前的字符。
正确的应该是MSGRGKGGKGLGKGGAKRHRKVLRDX
。
这引出了我的问题。如果 K
值下游的字符少于 20 个,如何修改代码以打印 K
之前的所有字符?
谢谢。
最佳答案
问题是,由于 site-20
为负,Python 认为它是相对于序列末尾的索引,因此切片是空的(因为第一个索引在最后一个索引之后) )。只要确保永远不会低于 0。
data=myfile.read()
str1 = data[site:site+1+20]
temp = data[max(site-20, 0):site]
final_sequence = temp+str1
print final_sequence
或更短
data=myfile.read()
final_sequence = data[max(site-20, 0):site+1+20]
print final_sequence
请注意,您不需要使用 min(site+1+20, len(data))
作为上限,因为 Python 会自动将超出序列末尾的切片索引剪切到序列中长度。
关于python - 从python文件中获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43911184/