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日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装