美文网首页
targetscan文件录入格式转换

targetscan文件录入格式转换

作者: 谢俊飞 | 来源:发表于2024-04-22 20:47 被阅读0次

    感谢CSDN博主JamH的文章动物miRNA靶基因本地预测(二)——数据准备,提供了非常详实的操作代码。我本人对python了解的并不多,仅能读懂代码,所以对作者给出的代码进行分析并作笔记整理。

    文中用到的Python代码解读

    str.strip([chars]);
    

    该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

    Python strip()方法

    Python replace()方法

    os.listdir()
    返回指定目录下的所有文件和目录名。

    import osname = os.listdir(os.getcwd())
    print(name)
    

    1. miRNA序列整合代码:

    原始文件.png
    # 导入csv模块,没安装的需要先安装
    import csv
     
    with open('D:\\用户\\桌面\\test.csv') as f:
        r = csv.reader(f)
        for row in r:
            print(row)
            # row是一个列表,将每一个列表都拼接成一行,即为一个miRNA的fasta格式
            line = '>' + row[0] + '\n' + row[1] + '\n'
            # 逐行保存
            with open('D:\\用户\\桌面\\test.txt', 'a') as r:
                r.writelines(line)
    

    对代码的解析:

    1)导入csv模块;
    2)使用open()方法打开这个csv文件,并将其存入变量f中;
    3)csv.reader()方法需要传递一个文件对象参数,从而创建一个与该文件相关联的阅读器(reader)对象,这里读取的结果就是列表(与后面的fasta文件有所区别);
    4)print(row)打印读取的文件对象内容;
    5)然后读取列表的行,添加上">"符号,加上每行列表的第一个元素row[0],并加上换行符"\n",再读取第二个元素加上换行符"\n";
    6)打开文件(可追加模式),存储为test.txt,然后将line写进去。
    最后呈现的效果就是,

    图片.png
    因为也读取了行头,所有需要删除前面两行
    sed -i '1,2d' test.txt
    

    2. 转换为targetscan要求的miRNA数据格式

    图片.png
    with open(r'D:\用户\桌面\test.txt') as f:
        for line in f:
            line = line.strip()
            if len(line) == 0:
                continue
            line = line.replace('\n', '').replace('>', '\n>')
            if line.startswith('\n>'):
                line = line.replace('>','') + '\t'
            else:
                line = line[1:8] + '\t' + '10010' 
            with open(r'D:\用户\桌面\test_targetscan.txt','a') as r:
                r.writelines(line)
    

    对代码的解析:

    1)打开test.txt文件并存储为变量f;
    2)去除每行左右空白,然后去除空行并继续;

    [line.strip()用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列;]

    3)line.replace('\n', '').replace('>', '\n>'),去除每行中的换行符号"\n",同时将">"更换为"\n>"(所以第一个序列前会出现多余的一个空行;此时,名字和序列仍然分别存在两行内);#这里去除了每行的换行符,所以是在一列内。
    4)在查看的一列中,如果是以换行符加上">",去掉">",并在后面添加一个分隔符"\t";
    5)在本列中出去上面的之外,如果不是以换行符加上">"(也就是纯粹的碱基序列行),取行的第2至8个元素(种子序列),加上分隔符,再加上物种ID,即10010;并且,两次去读的结果都放在了一个line里面。就是:
    miR-1-3p GGAATGT 10010
    6)打开文件(可追加模式),存储为test_targetscan.txt,然后将line写进去。
    记得最后手动删除一下空余的行

    grep . data.txt
    grep -v '^$' data.txt
    grep'[^$]’data.txt
    

    Linux 删除文件中空行的方法

    合并多个mRNA序列文件(分散的fasta文件)

    图片.png
    # 导入os模块
    import os
     
    # 获取目标文件夹的路径
    path = 'D:\\用户\\桌面\\test'
    # 获取当前文件夹中的文件名称列表
    filenames = os.listdir(path)
    # 逐个获取文件路径,并处理
    for filename in filenames:
        filepath = path + '\\' + filename
        # 读取单个文件,并逐行处理
        with open(filepath) as f:
            for line in f:
                # 去除每行左右空白
                line = line.strip()
                # 去除空白行
                if len(line) == 0:
                    continue
                # 合并序列为一行
                line = line.replace('\n', '').replace('>', '\n>')
                if line.startswith('\n>'):
                    # 去除多余信息,仅保留gene_id
                    line = line.split(' ')[0] + '\n'
                # 保存
                with open('D:\\用户\\桌面\\mRNA_16.txt', 'a') as r:
                    r.writelines(line)
    

    对代码的解析:

    1)导入os模块[1];
    2)获取目标文件夹的路径;
    3)os.listdir(path)获取当前文件夹中的文件名称列表
    4)给每个文件单独分配路径,filepath = path + '\' + filename;文件路径就成了单独的路径地址,是批量操作单个路径的方法。结果应该为(示例):
    /home/usr/input/3UTR/ACE.fasta
    /home/usr/input/3UTR/Akt.fasta
    ……

    5)读取单个文件并存储为变量f,并逐行处理(此时就是打开路径中的文件内容)
    6)去除每行左右空白,去除空行并继续;
    7)line.replace('\n', '').replace('>', '\n>'),去除每行中的换行符号"\n",同时将">"更换为"\n>"(所以第一个序列前会出现多余的一个空行;
    此时,#错误,名字和序列仍然分别存在两行内--);
    8)如果是以换行符加上">",先split这个行并提取分裂后的第一个元素,然后在加上换行符号;
    9)打开文件(可追加模式),存储为test_targetscan.txt,然后将line写进去。
    记得最后手动删除一下空余的行

    另类文件转换

    如果给出的文件格式是如下的格式,就需要再转换为标准格式:


    图片.png
    with open(r'D:\用户\桌面\total_reverse_CDS201703.fa', encoding='gbk') as fastas:
        for line in fastas:
            line = line.strip()
            if len(line) == 0:
                continue
            line = line.replace('\n', '').replace('>', '\n>')
            if line.startswith('\n>'):
                line = line.replace('gene=','') + '\n'
            with open(r"D:\用户\桌面\total_reverse_CDS201703.txt", 'a') as f:
                f.writelines(line)
    

    对代码的解析:

    1)读取保存好的文件total_reverse_CDS201703.txt;
    2)去除每行左右空白,去除空行并继续;
    3)line.replace('\n', '').replace('>', '\n>'),去除每行中的换行符号"\n",同时将">"更换为"\n>"(所以第一个序列前会出现多余的一个空行);
    4)line.replace('gene=','') + '\n',去除每行中的"gene=",同时添加换行符号(所以第一个序列前会出现多余的一个空行;
    错误,此时,名字和序列仍然分别存在两行内);
    5)打开文件(可追加模式),存储为test_targetscan.txt,然后将line写进去。
    记得最后手动删除一下空余的行

    mRNA输入格式(Targetscan要求格式)

    with open(r'D:\用户\桌面\total_reverse_CDS201703.txt') as f:
        for line in f:
            line = line.strip()
            if len(line) == 0:
                continue
            line = line.replace('\n', '').replace('>', '\n>')
            if line.startswith('\n>'):
                line = line.replace('>','') + '\t' + '10010' + '\t'
            with open(r'D:\用户\桌面\total_reverse_CDS201703_targetscan.txt','a') as r:
                r.writelines(line)
    

    对代码的解析:

    1)读取保存好的文件total_reverse_CDS201703.txt;
    2)去除每行左右空白,去除空行并继续;
    3)line.replace('\n', '').replace('>', '\n>'),去除每行中的换行符号"\n",同时将">"更换为"\n>"(所以第一个序列前会出现多余的一个空行;

    此时,名字和序列仍然分别存在两行内);

    4)打开文件(可追加模式),存储为total_reverse_CDS201703_targetscan.txt,然后将line写进去。
    记得最后手动删除一下空余的行

        #else:#个人理解的,这里应该也有一个合并的流程。但是上一步已经将碱基序列的行的换行符合去掉了。
        #    line = line[]
    

    4)下面的操作就是追加,将名字和序列在一行内);
    else:
    line = line[1:8] + '\t' + '10010'


    1. python os模块介绍

    相关文章

      网友评论

          本文标题:targetscan文件录入格式转换

          本文链接:https://www.haomeiwen.com/subject/asalirtx.html