【问题标题】:Write an txt file with fastq pair names with python用python写一个带有fastq对名称的txt文件
【发布时间】:2019-12-14 11:05:57
【问题描述】:

我是 python 新手,想改进它。现在我想编写一个 python 脚本来将我的 fastq 文件名组织成一个 txt 文件,如下所示:

我的文件是这样的:

d1_S10_L001_R1_001.fastq
d1_S10_L001_R2_001.fastq
d2_S11_L001_R1_001.fastq
d2_S11_L001_R2_001.fastq

我想要的是这样写一个txt文件:

d1 d1_S10_L001_R1_001.fastq d1_S10_L001_R2_001.fastq
d2 d2_S11_L001_R1_001.fastq d2_S11_L001_R2_001.fastq

此文件包含:第一个“_”之前的字符串,后跟 fastq 对。它们用“\t”分隔。

我知道这应该是一个非常简单的 python 任务,但我现在能做的就是:

import os


files = os.listdir(os.getcwd() + "/fastq")

with open("microbiome.files", "w") as myfile:
    for file in files:
        filename = file.split("_")[0]
        myfile.write(filename + "\t" + file + '\n')

这显然做得不对。它给了我:

d1 d1_S10_L001_R1_001.fastq 
d1 d1_S10_L001_R2_001.fastq
d2 d2_S11_L001_R1_001.fastq 
d2 d2_S11_L001_R2_001.fastq

如何解决这个问题?

非常感谢!

【问题讨论】:

  • 您好 Joran,抱歉,我不明白您所说的“全部收集”是什么意思。

标签: python fastq


【解决方案1】:

您需要先对文件进行排序

files = sorted(os.listdir("fastq")) # normal sort should work fine

那么你需要按文件名的第一部分分组

import itertools
for groupID,groupItems in itertools.groupby(files,lambda x:x.split("_",1)[0]):
    my_file.write("{id} {names}\n".format(id=groupID,names=" ".join(groupItems)))

【讨论】:

    【解决方案2】:

    按照 Joran 的建议收集所有内容,我更喜欢使用 glob(如果您的目录中可能还有其他一些文件类型也有帮助):

    import glob
    files=glob.glob("*.fastq")
    prefixes=set(f.split('_')[0] for f in files)
    files_dict={p: [f for f in files if f.startswith(p)] for p in prefixes}
    to_write='\n'.join(["{} {}".format(k, " ".join(v) for k, v in files_dict.items()] )
    writer=open("microbiome.files", 'w')
    writer.write(to_write)
    writer.close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-14
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 2023-02-22
      • 2017-08-15
      • 1970-01-01
      相关资源
      最近更新 更多