我有一个看起来像这样的文件格式
>1ATGC>2TTTT>3ATGC>$$$>B1ATCG>B2TT-G>3TTCG>B4TT-G>B5TTCG>B6TTCG$$$>C1TTTT>C2ATGC
注意:“$$$”会对文件进行分割,以便$$$之前的任何内容都设置为1,而$$$之后的任何内容都设置为2,之后是下一个$$$的Set3等。
我必须做以下事情:
一个。连接“>”后面的序列。所以,我必须加入“ATGC”“TTTT”“ATGC”并存入(1)并且我必须连接“ATCG”“TT-G”“TTCG”“TT-G”“TTCG”“TTCG”和商店as(2)...再次连接并存储在(3)
中输出应该是一个如下所示的列表:
("ATGCTTTTATGC","ATCGTT-GTTCGTT-GTTCGTTCG","TTTTATGC")
(2)然后,我找到具有最大长度=>的集合。这里设置(2)
(3)如果Set i的长度不等于Set(2),那么我在末尾Set i添加“Z”,这样Set i的长度现在等于Set(2)的长度
(4)我用“Z”替换所有“ - ”
输出应如下所示:
("ATGCTTTTATGCZZZZZZZZZZZZ",
"ATCGTTZGTTCGTTZGTTCGTTCG",
"TTTTATGCZZZZZZZZZZZZZZZZ")
以下是我尝试过的代码:
in_file = open('c:/test.txt','r')
org = []
seqlist = []
seqstring = ""
for line in in_file:
if line.startswith("$$$"):
if seqstring!= "":
seqlist.append(seqstring)
seqstring = ""
org.append(line.rstrip("\n"))
elif line.startswith(">"):
seqstring += line.rstrip("\n")
seqlist.append(seqstring)
setdraft = seqlist
maxsetlength = max(len(seqlist))
setdraft2 =[]
for i in setdraft:
if len(i) != maxsetlength:
setdraft2 = i.append("Z")
setfinal =[]
for j in setdraft2:
if j in setdraft2 =="-":
setfinal = j.insert ("Z")
上述脚本不起作用。它给了我多个错误。
例如。当我打印setdraft
时,它会给我输出
['>1ATGC>2TTTT>3ATGC>$$$>B1ATCG>B2TT-G>3TTCG>B4TT-G>B5TTCG>B6TTCG$$$>C1TTTT>C2ATGC']
与输入
相同Traceback (most recent call last):
File "C:/Users/ACER/Desktop/trial.py", line 25, in <module>
maxsetlength = max(len(seqlist))
TypeError: 'int' object is not iterable
答案 0 :(得分:1)
目前还不清楚您的数据集是多么脆弱,但如果它遵循上面的模式(即最后4个字符是您正在寻找的那个),那么您可以使用几个split()
和{{1 }}和itertools.zip_longest
它回来追加zip
Z
如果你不介意它作为一个列表,那么你可以避免>>> import itertools as it
>>> import string
>>> def digit_index(s):
... for i, c in enumerate(s):
... if c in string.digits:
... return i
... return 0
...
>>> s = '>1ATGC>2TTTT>3ATGC>$$$>B1ATCG>B2TT-G>3TTCG>B4TT-G>B5TTCG>B6TTCG$$$>C1TTTT>C2ATGC'
>>> parsed = [''.join(y[digit_index(y)+1:].replace('-', 'Z') for y in x.split('>')) for x in s.split('$$$')]
>>> parsed
['ATGCTTTTATGC', 'ATCGTTZGTTCGTTZGTTCGTTCG', 'TTTTATGC']
>>> [''.join(x) for x in zip(*it.zip_longest(*parsed, fillvalue='Z'))]
['ATGCTTTTATGCZZZZZZZZZZZZ',
'ATCGTTZGTTCGTTZGTTCGTTCG',
'TTTTATGCZZZZZZZZZZZZZZZZ']
回到字符串:
join()