我是一个试图自学 Python 的新手。我有一个包含一堆数字的文件,我想将它们作为整数“导入”到 python 列表中(或者至少这是我认为我想要做的)。我似乎遇到了问题,但我不明白它是什么。以下是有关我的问题和我尝试过的代码的一些详细信息:
我有一个 DNA 序列(例如一串约 150,000 个字母),我想让 python 转到该字符串中的某个位置,然后在该位置左侧打印 150 个字母,该位置的字母被正方形包围括号,然后是该位置右侧的 150 个字母。我需要对字符串中 >100 个位置执行此操作。我在单独的文件中有这些职位的列表。我发现 Biopython 有一个对象可以为我处理很长的字符串,如果我告诉 python 我想要什么位置(例如手动分配),我可以切片这个字符串并获得正确的输出。现在我希望能够从另一个文件中导入我的目标位置,然后让 python 迭代地遍历该列表并将输出打印到另一个文件。第一部分是我遇到一些麻烦的地方。
我尝试了几种不同格式的输入文件。像这样的一个:
500,1000,15000
还有一个像这样的(所有位置在不同的行上):
500
1000
15000
根据我阅读的其他一些帖子,我尝试了几件事。这是一个:
from Bio import SeqIO
import csv
with open('Results.fa', 'a') as f1:
Reference = SeqIO.read("GEO5FinalAssembly2SC.fa", "fasta") # Biopython
DataFile = open('TestFile.csv', 'r')
DataReader = csv.reader(DataFile)
SNP = []
for row in DataReader:
SNP.append(row)
for i in SNP:
IA=i-151 #Creating the intervals
IB=i-1
JA=i+1
JB=i+151
Fragment = Reference.seq[IA:IB] + "[" + Reference.seq[i] + "]" + Reference.seq[JA:JB]
F = str(Fragment) #Need to turn Fragment into a string that can be written
header = ">MINT_SNP" + str(i) + "\n"
f1.write(header)
f1.write(F)
f1.write("\n")
这将返回错误:
Traceback (most recent call last):
File "./ReferenceSplitter3.py", line 15, in <module>
IA=i-151 #Creating the intervals
TypeError: unsupported operand type(s) for -: 'list' and 'int'
我也试过这个:
from Bio import SeqIO
import csv
with open('Results.fa', 'a') as f1:
Reference = SeqIO.read("GEO5FinalAssembly2SC.fa", "fasta")
with open('TestFile.txt', 'r') as Input:
rows = csv.reader(Input, quoting=csv.QUOTE_NONNUMERIC)
SNP = [[item for number, item in enumerate(row)] for row in rows]
for i in SNP:
IA=i-151 #Creating the intervals
IB=i-1
JA=i+1
JB=i+151
Fragment = Reference.seq[IA:IB] + "[" + Reference.seq[i] + "]" + Reference.seq[JA:JB]
F = str(Fragment) #Need to turn Fragment into a string that can be written
header = ">SNP" + str(i) + "\n"
f1.write(header)
f1.write(F)
f1.write("\n")
这给出了类似的错误:
Traceback (most recent call last):
File "./ReferenceSplitter4.py", line 13, in <module>
IA=i-151 #Creating the intervals
TypeError: unsupported operand type(s) for -: 'list' and 'int'
但是,当我像这样 SNP = (500,1000,1500) 自己定义一个整数列表时,它似乎工作得很好。我想知道我是否在这里遗漏了一些基本的 python 概念。抱歉,如果这是一个非常基本的问题,但任何建议将不胜感激!