Python 读取文件并输出包含主文件子集的新文件

Python 读取文件并输出包含主文件子集的新文件,python,text,Python,Text,我有一个包含数据行的文本文件。我想使用python创建新的较小的文本文件,每个文件都包含此主文本文件的指定子集。每个新文件应以第3列中的字符串命名,并且该文件应包含第3列中包含该字符串但应排除第3列本身的所有行,因为该信息现在存储在文件名中。我的主要问题是如何将最后一列指定为用于文件名的字符串 输入文本文件的示例: chr8:200-300 Gene1 chr8:400-500 Gene1 chr4:50-60 Gene2 chr4:90-200 Gene2 chr8:30-400

我有一个包含数据行的文本文件。我想使用python创建新的较小的文本文件,每个文件都包含此主文本文件的指定子集。每个新文件应以第3列中的字符串命名,并且该文件应包含第3列中包含该字符串但应排除第3列本身的所有行,因为该信息现在存储在文件名中。我的主要问题是如何将最后一列指定为用于文件名的字符串

输入文本文件的示例:

chr8:200-300    Gene1
chr8:400-500    Gene1
chr4:50-60  Gene2
chr4:90-200 Gene2
chr8:30-400 Gene3
chr8:9618-9749  Gene4
名为Gene2.txt的所需输出文件示例:

chr4:50-60
chr4:90-200

您可以通过以下方式解决此问题:

  • 读取输入行并拆分列
  • 创建将名称映射到项目数组的词典。将每个输入行插入字典
  • 反复阅读字典。对于每个字典项,使用字典键作为文件名,使用数组作为文件内容编写一个文件

  • 请参见其他用户评论的,如果您使用字典,则可以对值进行迭代

    with open("path/to/file.txt","r") as f:
        d = {}
        for line in f:
            content,gene  = line.strip().split()
            if d.has_key(gene):
                d[gene].append(content)
            else:
                d[gene] = []
                d[gene].append(content)
    
        for key,value in d.iteritems():
            f = open("path/to/destination/{}.txt".format(key), "w")
            for item in value:    
                f.write("{}\n".format(item))
            f.close()
    

    堆栈溢出用户需要做一些研究工作。如目前所述,它很可能被关闭为“过于宽泛”(即使它没有那么宽泛)。修改你的问题,展示一些研究成果,并将其标记为重新打开。一个开始的提示,正则表达式很适合切分:
    re.match(r)([^:]+):([^\s]+)\s+(.*),“chr8:200-300 Gene1”).groups()
    为你提供了
    ('chr8',200-300',Gene1')
    使第三个项目可以轻松地用于文件名。效果很好,谢谢!没问题。很高兴我能提供帮助。如果数据中有4列,我将如何修改它,以便输出前3列,最后一列是用于文件名的基因名称?您有新数据的外观示例吗?实际上,我用以下方法解决了一半:“fields=line.strip().split(“\t”)content=fields[0:3]gene=fields[3]但是,文件的内容在三列数据周围仍然具有所有格式,如“[”]”。所以问题是如何在没有这种python格式的情况下打印数据