我有两个文本文件,我试图在python 2.7.7中使用,结构如下:
sequence_file.txt:
MKRPGGAGGGGGSPSLVTMANSSDDGYGGVGMEAEGDVEEEMMACGGGGE
positions.txt
10
7
4
我想要做的是在position.txt中指示的每个位置的序列中插入一个#符号:
MKR#PGG#AGGG#GGSPSLVTMANSSDDGYGGVGMEAEGDVEEEMMACGGGGE
目前,我的代码如下:
# Open sequence file, remove newlines:
with open ("sequence_file.txt", "r") as seqfile:
seqstring=seqfile.read().replace('\n', '').replace('\r', '')
# Turn sequence into list
seqlist = list(sequence)
# Open positions.txt, and use each line as a parameter for the insert() function.
with open("positions.txt") as positions:
for line in positions:
insertpoint = line.rstrip('\n')
seqlist.insert(insertpoint, '#')
seqlist = list(sequence)
该代码的最后一个块就是它所处的位置。我试图让它读取第一行,修剪换行符(\ n),然后在insert()命令中将该行用作变量(插入点)。但是,每当我尝试这个时它告诉我:
Traceback (most recent call last): File "<pyshell#8>", line 4, in <module> seqlist.insert(insertpoint, '#') TypeError: an integer is required
如果我测试一下并尝试打印插入点&#39;它正确地产生了数字,因此我对错误的解释是,当我使用insert()命令时,它正在读取&#39; insertpoint&#39;作为文本而不是刚刚设置的变量。
有谁可以建议这可能出错?
答案 0 :(得分:3)
str.rstrip()
会返回字符串,但insert()
需要一个整数。
解决方案:将该字符串转换为整数:
insertpoint = int(line.rstrip('\n'))
注意:当您打印insertpoint
时,会显示''
,但它是一个字符串。您可以通过打印其类型来检查:
print(type(insertpoint)) # <type 'str'>
答案 1 :(得分:1)
看起来你可能需要在insertpoint:
周围放置int()seqlist.insert(int(insertpoint), '#')