用 python 写一个带有 fastq 对名称的 txt 文件
Write an txt file with fastq pair names with python
我是 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
如何更正此问题?
非常感谢!
您需要先对文件进行排序
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)))
按照 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()
我是 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
如何更正此问题?
非常感谢!
您需要先对文件进行排序
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)))
按照 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()