zoukankan      html  css  js  c++  java
  • 序列拆分及批量归类至文件夹(v1)

    拿到一堆线粒体rna的coI序列,由于全部序列都放在一个txt文件里面,因为后期需要把每一个序列单独拿出来fas文件,然后根据一个表格分类到种。要手动复制粘贴不知道要花多久,所以就用python自动化一下。

    v1
    整个过程分三步

    1.拆分为以缩写命名的单个文件

    #split into single seq
    import os
    import pandas as pd
    from tst import bad_val
    
    file_path=os.path.abspath(r"E:新建文件夹新建文件夹")
    df_E2a = pd.read_excel("E2a.xlsx")
    df_ce2e = pd.read_excel("E:pythonProject1CE2E.xlsx")
    
    df_E2a.index = df_E2a['ab.']
    a = ">"
    
    f=open(r'E:新建文件夹新建文件夹COI(1).fas')
    for line in f:
        if line.startswith(">"):
            new=line.lstrip('>').strip('
    ')
            if new in bad_val:
                full = 'Not found!'+ new
            else:
                full = df_E2a.name[df_E2a['ab.'].loc[new]]
            outfile = open("E:新建文件夹新建文件夹db\"+"%s"%new + '.' + 'fas',"w")
            outfile.write(line+next(f))
            outfile.close()
    
    
    
    
    print("Finished")
    

    2.将同一物种的序列归类,放入以物种命名的文件夹

    classify

    import os # os是用来切换路径和创建文件夹的。
    import pandas as pd
    from tst import bad_val
    from shutil import copy # shutil 是用来复制黏贴文件的
    df_E2a = pd.read_excel("E2a.xlsx")
    df_E2a.index = df_E2a['ab.']
    file_path = r'E:新建文件夹新建文件夹db' # 想拆分的文件夹所在路径,也就是一大堆文件所在的路径
    save_dir = r'E:新建文件夹新建文件夹class' # save_dir 是想把复制出来的文件存放在的路径

    获取 file_path 下的文件和文件夹列表

    因为 file_path 里面没有文件夹,所以不处理有文件夹的情况

    pathDir = os.listdir(file_path) # os.listdir(file_path) 是获取指定路径下包含的文件或文件夹列表
    for filename in pathDir: # 遍历pathDir下的所有文件filename
    file_name = filename.split('.')[0]

    if file_name in bad_val:
        full = '!Not found!'
    else:
        full = df_E2a.name[df_E2a['ab.'].loc[file_name]]
    
    dir_name = full.strip()  # 新的文件夹的命名
    
    
    from_path = os.path.join(file_path, filename)  # 旧文件的绝对路径(包含文件的后缀名)
    to_path = save_dir + "\" + dir_name  # 新文件的绝对路径
    
    if not os.path.isdir(to_path):  # 如果 to_path 目录不存在,则创建
        os.makedirs(to_path)
    copy(from_path, to_path)  # 完成复制黏贴
    

    3.发现txt文件中的缩写与物种名表格的缩写部分不相同,暂时处理:找出无法匹配的缩写单独放入一个文件夹,人工处理

    #find the unmatched value
    import pandas as pd
    import difflib
    
    bad_val = []
    df_E2a = pd.read_excel("E2a.xlsx")
    f=open(r'E:新建文件夹新建文件夹COI(1).fas')
    for line in f:
        if line.startswith(">"):
            new=line.lstrip('>').strip('
    ')
            a=difflib.get_close_matches(new,df_E2a['ab.'],1, cutoff=1)
            if len(a)==0:
                bad_val.append(new)
    
  • 相关阅读:
    权值线段树模版
    P2679 [NOIP2015 提高组] 子串
    P3747 [六省联考 2017] 相逢是问候
    P2822 [NOIP2016 提高组] 组合数问题
    P2331 [SCOI2005]最大子矩阵
    P1854 花店橱窗布置
    P5888 传球游戏
    Hard | LeetCode 42. 接雨水 | 单调栈 | 双指针
    Medium | LeetCode 621. 任务调度器 | 设计
    Medium | LeetCode 166. 分数到小数 | 数学
  • 原文地址:https://www.cnblogs.com/impw/p/14791774.html
Copyright © 2011-2022 走看看