我有一本字典,里面有40万项内容,其关键字是DNA名称,值是DNA序列。
我想将字典分成40个文本文件,每个文件中有10,000个项目。

这是我的代码:

record_dict # my DNA dictionary

keys_in_dict #the list of the keys

for keys in keys_in_dict:

    outhandle = open("D:\\Research\\Transcriptome_sequences\\input{0}.fasta".format (?????), "w")


我应该用什么代替(?????)?如何完成此循环?

更新:
大家好
谢谢您的帮助。现在,我可以从字典中制作多个文件。但是,当我尝试直接从原始文件制作多个文件而不是首先制作字典时,出现了问题。这些代码只会生成一个文件,其中包含第一项。我做错了什么?这是我的代码:

from Bio import SeqIO
handle = open("D:/Research/Transcriptome_sequences/differentially_expressed_genes.fasta","rU")

filesize = 100        # number of entries per file
filenum = 0
itemcount = 0


for record in SeqIO.parse(handle, "fasta") :
    if not itemcount % filesize:
        outhandle = open("D:/Research/Transcriptome_sequences/input{0}.fasta".format(filenum), "w")
        SeqIO.write(record, outhandle, "fasta")
        filenum += 1
        itemcount += 1
outhandle.close()

最佳答案

这不是最快的解决方案,但我认为最简单的方法是跟踪行并每循环10,000次迭代打开一个文件。

我认为您正在写出Fasta之类的东西。

否则,您可以事先对列表[:10000]进行切片,并生成一个输出块,以便使用一个命令一次写入所有内容(这会更快)。即使是这样,您也可能希望通过在循环中进行串联,然后用单个.write命令为每个文件写出一个可怕的字符串来构建字符串。

itemcount=0
filesize = 10000
filenum = 0
filehandle = ""

for keys in keys_in_dict:
    # check if it is time to open a new file,
    # whenever itemcount/filesize has no remainder
    if not itemcount % filesize:
        if filehandle:
            filehandle.close()
        filenum+=1
        PathToFile = "D:/Research/Transcriptome_sequences/input{0}.fasta".format(filenum)
        filehandle = open(PathToFile,'w')
    filehandle.write(">{0}\n{1}\n".format(keys,record_dict[keys])
    itemcount += 1

filehandle.close()




编辑:这是一种更有效的方式(按时间而不是按内存),每个文件只写一次(共40倍),而不是每行写一次(400,000次)。与往常一样,检查输出,尤其要确保输出中包括第一个和最后一个序列,并且正确写入了最后一个文件。

filesize = 10        # number of entries per file
filenum = 0
filehandle = ""
OutString = ""

print record_dict
for itemcount,keys in enumerate(keys_in_dict):
    # check if it is time to open a new file,
    # whenever itemcount/filesize has no remainder
    OutString += ">{0}\n{1}\n".format(keys,record_dict[keys])
    if not itemcount % filesize:
        if filehandle:
            filehandle.write(OutString)
            filehandle.close()
            OutString =""
        filenum+=1
        PathToFile = "D:/Research/Transcriptome_sequences/input{0}.fasta".format(filenum)
        filehandle = open(PathToFile,'w')


filehandle.write(OutString)
filehandle.close()

关于python - 如何在python中从字典中写入多个文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26856026/

10-14 19:48
查看更多