首页 > 解决方案 > 通过将文件名与部分列值匹配,用列值覆盖 fasta 文件的标题

问题描述

数据集:

提交者 | 文件名 | 病毒

林 | 012345.fasta | abc/美国/abc- 01234567 /1234

林 | 012345.fasta | abc/美国/abc- 04567898 /1234

林 | 012345.fasta | abc/USAabc- 78935421 /1234

名为 012345 的目录中的文件:

04567898 -abc-a124-pol.fasta

78935421 -abc-a124-pol.fasta

01234567 -abc-a124-pol.fasta

文件内部:

& 01234567 -abc-a124-pol

ACTGATGATGAGATAGA ATAGATAGATAGATAG

新字形

注意:C 列中有相同的 8 位数字、fasta 文件名和 fasta 文件头。

我想要做的是从 C 列中取出整个字符串,并覆盖当前的 fasta 文件头。输出将如下所示:

法斯塔文件名:

01234567 -abc-a124-pol.fasta

文件内部:

&abc/美国/abc- 01234567 /1234

ACTGATGATGAGATAGA ATAGATAGATAGATAG

新字形

这是我正在尝试编写的一门课程。我正在努力让它发挥作用。请让我知道是否有更简单的方法。

def parse(file_name):   
    with zipfile.ZipFile(file_name, "r") as zf:
        for name in zf.namelist():
            if ".fasta" in str(name) and '.ipynb' not in str(name):
                with io.TextIOWrapper(zf.open(name)) as file:
                    e = "".join([">{} \n{}".format(str(title.split(None, 1)[0]), identifiers)
                        for title, identifiers in SimpleFastaParser(file)])
                with open("test_dict.fasta", "a+") as f0:
                    f0.write('{}\n'.format(e))
    return file_name       

def names(file_name):
    with zipfile.ZipFile(file_name, "r") as zf:
        e1 = []
        for name in zf.namelist():
            if ".fasta" in str(name) and '.ipynb' not in str(name):
                with io.TextIOWrapper(zf.open(name)) as file:
                    e1 += [title.split(None, 1)[0]
                        for title, identifiers in SimpleFastaParser(file)]
        print(e1)
        return 

def pandas(file_name):
    with zipfile.ZipFile(file_name, "r") as zf:
        e4 = []
        for name in zf.namelist():
            if ".fasta" in str(name) and '.ipynb' not in str(name):
                with io.TextIOWrapper(zf.open(name)) as file:
                    e4 += [{title.split(None, 1)[0]:[identifiers, len("".join(identifiers))]
                        for title, identifiers in SimpleFastaParser(file)}]

                          
                dataset = pd.DataFrame({'Name': ["".join(i.keys()) for i in e4], 
                                        'Length':[list(i.values())[0][1] for i in e4],
                                        'Sequence':[list(i.values())[0][0] for i in e4]})
                   
            
        return dataset

标签: pandasbiopythonfasta

解决方案


推荐阅读