用python从文件中提取字符串

2024-03-28 12:59:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件,我想从中提取一个基于变量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之前的所有字符? 非常感谢。你知道吗


Tags: 字符串代码内容datasite字符myfiletemp
3条回答

您必须检查文件长度的上限和下限。因为必须检查负值(对于before位置)和相同的规则(对于after位置)作为上限。你知道吗

问题是,由于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会自动将序列末尾以外的切片索引剪辑为序列长度。你知道吗

第一个答案使用MAX也是正确的。 下面的示例是非pythonic方式使用条件。你知道吗

data = "MSGRGKGGKGLGKGGAKRHRKVLRDXYZX"

str1 = data[site:site+1+20]
if site <= 20:
     temp = data[0:site]
elif site > 20:
    temp = data[site%20:site]

print str1 + temp

用不同的数据编写适当的unittest用例来验证您的逻辑。你知道吗

相关问题 更多 >