bigben446 2022-03-20 04:01 采纳率: 85.7%
浏览 128
已结题

shell或python脚本批量处理txt文件

有一堆小文本文件,格式为:文件名.m8,其实就是txt文本文件。文件内,一行内容为一条信息,信息内容用tab隔开。

SRR329659.m8文件内容:

SRR329659.5585.1    XXXX    44.8    29    16    14    100    527    555    6.0e-07    35.4    VRRNFPHCMVFAYMDDVVLGAKSVEHLES    GTCCAAAGAGCCTTTCCCTCATGTCTTATATATCACTATATGGACGACATTCTCCTAGCCCATCCCAAACCAGAACAACTTGATTCA
SRR329659.40047.1    XXXX    39.3    28    17    87    4    529    556    5.1e-06    32.3    RNFPHCMVFAYMDDVVLGAKSVEHLESV    AAGTGAATCGAGTTGTTCTGGTTTGGGATGGGCTAGGAGAATGTTGTCCATATAGTGATATATAAGACATGAGGGAAAGGCTCT

现在想:
1,一个bash或者python脚本,提取每一行信息,转换为两行内容,第一行是第一段,且以>开头,第二行是12段。原来两行信息转换以后就变成4行信息。转换到新的文件,文件名.fasta。以上内容就变成:

SRR329659.fasta

>SRR329659.5585.1
VRRNFPHCMVFAYMDDVVLGAKSVEHLES
>SRR329659.40047.1
RNFPHCMVFAYMDDVVLGAKSVEHLESV

2,一个文件夹下有大量类似小文件,需要将这类文件批量转换,文件名.m8,转换成:文件名.fasta。bash或者python脚本输入一个文件夹位置1——里面是待转换文件,输出另外一个文件夹位置2——转换好的文件。
运行命令类似于 bash file-trans.sh 输入文件夹1 输出文件夹2

  • 写回答

6条回答 默认 最新

  • 皮尔菲特 2022-03-20 22:33
    关注
    # -*- utf8 -*-
    """
    pyCode : test.py
    Created by: Taro
    Description:
    2022/3/20 0020
    """
    import os
    import os.path as osp
    import sys
    if len(sys.argv) != 3:
        print("usage: python trans.py source_dir out_dir")
    
    source_dir = sys.argv[1]
    if not osp.exists(source_dir):
        print("input source_dir is not exist,please check!")
    out_dir = sys.argv[2]
    if not osp.exists(out_dir):
        os.makedirs(out_dir)
    count = 0
    for root, dirs, files in os.walk(source_dir):
        for f in files:
            if f.endswith(".m8"):
                print("start trans: ", f,)
                count += 1
                infile = osp.join(root, f)
                outfile = f.replace('.m8', ".fasta")
                outfile = osp.join(out_dir, outfile)
                with open(infile, 'r', encoding='utf-8') as inf:
                    with open(outfile, 'w', encoding='utf-8') as wf:
                        for i, line in enumerate(inf):
                            # import  pdb
                            # pdb.set_trace()
                            source_line = line.strip().split()
                            line =[]
                            for tmp in source_line:
                                if tmp:
                                    line.append(tmp)
                            if len(line) < 12:
                                print("file:{},line:{},format is not right ,please check!")
                                continue
                            else:
                                wf.write(">"+line[0]+"\n"+line[11]+"\n")
                # print("end trans")
    print("total trans:", count)
    

    例如拷贝到 test.py 使用方法就是:python test.py inputdir outputdir

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 已采纳回答 3月21日
  • 创建了问题 3月20日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵