探针寻找之旅(5)——拆分长探针到短探针的 python脚本

  • 故事起源,我们想知道35bp序列中有几个15bp的片段,用这些15bp的片段比对到基因组,并统计情况。
    因此想要写一个python脚本实现 由35bp的序列文件生成所有可能包含的的15bp片段序列。

  • 其实超级简单,就是干,我编的脚本内容在此~~

# 要打开的文件路径
filePath = input("打开文件路径:")
# 设置要切分为多长的序列
sepLen = int(input("要将序列拆分为的碱基数(只能输入数字):"))
# 拆分后短序列名称,后面会加数字区分不同的短序列
seqName = input("拆分后短序列名称(我会加数字区分不同的短序列):")
# 设置参数读取序列
initialSeq = ""
# 读取.fa文件,得到原始序列
with open(filePath,"r") as file:
    line = file.readline()
    while line:
        if line[0] != ">":
            initialSeq = line
        line = file.readline()
# 建立列表seperateSeq,接收拆分的序列
sepSeq = []
# 识别序列长度
iniLen = int(len(initialSeq))
# 负责命名短序列名称的参数seperateName
sepName = ""
# 拆分序列
for bp in range(iniLen - sepLen):
    sepName = ">" + seqName + str(bp + 1)
    sepSeq.append(sepName)
    sepSeq.append(initialSeq[bp:bp+sepLen])
# 写入新文件
sepSeq = [line+"\n" for line in sepSeq]
sepFile = input("拆分文件路径及命名:")
with open(sepFile, "w") as f:
    f.writelines(sepSeq)
  • 下一步,怎么在linux服务器上运行python脚本呢?
    chmod +x增加运行权限 → 输入xxx.py即可运行
    试了下这个好像不行,总是报错,于是我加了python运行路径和编码转换
#! ~/miniconda3/bin/python
# coding=UTF-8

还是不行[摇头][摇头]

  • 但其实直接python xxx.py就好啦。BUT,我的输出文件里怎么什么都没有?为何?
  • 一番努力,问题解决了:linux下python3在文件读取时,当文件最后一行为空行时,认为有内容,并且readline会自动读为一行,因为,最后一行自动有一个换行符“\n”,最后一行其实是读取了一个换行符“\n”;但window中的python则不会读取最后一个空行。
  • 于是,终版脚本:
# 要打开的文件路径
filePath = input("打开文件路径:")
# 设置要切分为多长的序列
sepLen = int(input("要将序列拆分为的碱基数(只能输入数字):"))
# 拆分后短序列名称,后面会加数字区分不同的短序列
seqName = input("拆分后短序列名称(我会加数字区分不同的短序列):")
# 设置参数读取序列
initialSeq = ""
# 读取.fa文件,得到原始序列
with open(filePath,"r") as file:
    line = file.readline()
    while line:
        if line[0] != ">" and line != "\n":
            initialSeq = line
        line = file.readline()
# 建立列表seperateSeq,接收拆分的序列
sepSeq = []
# 识别序列长度
iniLen = int(len(initialSeq))
# 负责命名短序列名称的参数seperateName
sepName = ""
# 拆分序列
for bp in range(iniLen - sepLen):
    sepName = ">" + seqName + str(bp + 1)
    sepSeq.append(sepName)
    sepSeq.append(initialSeq[bp:bp+sepLen])
# 写入新文件
sepSeq = [line+"\n" for line in sepSeq]
sepFile = input("拆分文件路径及命名:")
with open(sepFile, "w") as f:
    f.writelines(sepSeq)
  • blast-short比对后想要统计比对结果时又有问题了,awk能做到吗?不知道啊。

  • 参考文章
    python list数据写入文件
    Python3 List append()方法
    python3-file文件操作
    在linux服务器上运行python文件

你可能感兴趣的:(探针寻找之旅(5)——拆分长探针到短探针的 python脚本)