在insert()中调用变量

时间:2015-01-08 20:07:05

标签: python python-2.7

我有两个文本文件,我试图在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;作为文本而不是刚刚设置的变量。

有谁可以建议这可能出错?

2 个答案:

答案 0 :(得分:3)

str.rstrip()会返回字符串,但insert()需要一个整数。

解决方案:将该字符串转换为整数:

insertpoint = int(line.rstrip('\n'))

注意:当您打印insertpoint时,会显示'',但它是一个字符串。您可以通过打印其类型来检查:

print(type(insertpoint)) # <type 'str'>

答案 1 :(得分:1)

看起来你可能需要在insertpoint:

周围放置int()
seqlist.insert(int(insertpoint), '#')