targetscan文件录入格式转换

2024-04-22  本文已影响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模块介绍

上一篇下一篇

猜你喜欢

热点阅读