如何在Python中读取带分隔符的文件并在末尾附加字符?

时间:2016-10-08 16:17:12

标签: python append startswith

我有一个看起来像这样的文件格式

 >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>B‌​6TTCG$$$>C1TTTT>C2AT‌​GC']

与输入

相同
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

1 个答案:

答案 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()