首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用python编写带有fastq对名称的txt文件

使用python编写带有fastq对名称的txt文件
EN

Stack Overflow用户
提问于 2019-12-14 10:41:56
回答 2查看 93关注 0票数 2

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

我的文件是这样的:

代码语言:javascript
运行
复制
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文件:

代码语言:javascript
运行
复制
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任务,但我现在能做的就是:

代码语言:javascript
运行
复制
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')

这显然不是做正确的工作。它给了我:

代码语言:javascript
运行
复制
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

如何纠正这一点?

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-14 10:48:50

您需要先对文件进行排序

代码语言:javascript
运行
复制
files = sorted(os.listdir("fastq")) # normal sort should work fine

然后,您需要按文件名的第一部分进行分组

代码语言:javascript
运行
复制
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)))
票数 1
EN

Stack Overflow用户

发布于 2019-12-14 11:05:57

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

代码语言:javascript
运行
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59331900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档