python 3.x - Python3从字典创建文件



例如,我在一个名为searchInMyDict(dict)的函数中有一本字典。该函数中包含的字典具有键组名,值为基因功能列表。

字典看起来像:

{"OG_1": ["gene's functionA, gene's functionB, gene's functionC"]
 "OG_2": ["gene's functionM, gene's functionL, gene's functionX"]
 "OG_XX": ["gene's functionY, gene's functionP, gene's functionR"]}

例如,"OG_1"是我的字典的键之一,而"gene's functionA,gene's functionB,gene's functionC"是这个键的值。

我需要做的是做一个函数,它能够:创建一个文件.txt以组名作为文件名,其中包含该组的所有基因功能,并为我的字典中的每个组创建一个这样的文件。

file1name是"OG_1.txt",它包含"gene's functionA, gene's functionB, gene's functionC".file2name是"OG_2.txt",它包含"gene's functionM, gene's functionL, gene's functionX"。依此类推,直到最后一组将创建"OG_XX.txt"作为文件名,并在其中包含"gene's functionM,gene's functionL,gene's functionX"。所以我期待得到很多文件,每组一个。

我尝试了这样的事情:

def writeFilesForEveryGroupsFromDict(aDict):
for key in aDict:
    if not len(key) != len(aDict):
        f = open("key", "w")
        f.append(aDict[key])
    else:
        break
finalDict = searchInMyDict(dict)
print(writeFilesForEveryGroupsFromDico(finalDict))

但它似乎根本不起作用,我可能忘记了一些事情。有没有人有想法来解决我的问题?感谢您即将回答!

  1. 取下if not len(key) != len(aDict)break

    您可能想做的是在迭代所有键后停止循环。然而key'OG_1'之一,'OG_2''OG_XX',它不是计数器或类似的东西。

  2. open("key", "w")替换为 open(key + ".txt", "w")

    open("key", "w")的意思是"打开一个名为key的文件进行写入"。但是您要做的是"打开一个名为<the key of the dictionary>.txt的文件" 这意味着您需要键的值和.txt后缀。

  3. f.append替换为 f.write

    这就是将字符串写入文件的方式。

  4. 使用 aDict[key][0] 而不是 aDict[key]

    字典的值是包含一个字符串的列表,因此您应该从值中提取该字符串。

最后,结果如下:

def writeFilesForEveryGroupsFromDict(aDict):
    for key in aDict:
        f = open(key + '.txt', 'w')
        f.write(aDict[key][0])

这应该有效。请注意,仍有改进的余地。

例如,您可以同时迭代键和值(使用 aDict.values() ),并且可以使用 with 语句处理文件(如果发生异常,该语句将负责关闭文件):

def writeFilesForEveryGroupsFromDict(aDict):
    for key, value in aDict.values():
        with open(key + '.txt', 'w') as f:
            f.write(value[0])

字典的格式存在一些问题。我修复了它们并根据您提供的对要使用的词典的描述修改了格式。新字典表示值列表的键名,旧版本是一组非分隔字符串的键名。

由于您没有使用平面数据,因此我建议您将数据存储在JSON中 - 这将保持字典结构并使其易于阅读。此代码会将一个新的 *.json 文件保存在与代码相同的目录中,您可以在普通文本编辑器中打开和查看该文件。如果您选择使用相同的"导入 json"模块,则可以在另一个 python 脚本中导入和使用相同的文件。

import json 
geneFunctionDict = {
    "OG_1": ["gene's functionA", "gene's functionB", "gene's functionC"],
    "OG_2": ["gene's functionM", "gene's functionL", "gene's functionX"],
    "OG_XX": ["gene's functionY", "gene's functionP", "gene's functionR"] }

def writeFilesForEveryGroupsFromDict(aDict):
    filename = 'geneFunctionDict.json'
    with open(filename, 'w') as outfile:
        json.dump(aDict, outfile)
writeFilesForEveryGroupsFromDict(geneFunctionDict)
'''

回应您的意见'''

以下代码将完全按照您在注释中描述的操作。如果您使用的 geneFunction 密钥不超过 10,000 个,我仍然建议将 JSON 作为比将字典中的数据转换为平面字符串文件更灵活的存储格式。

geneFunctionDict = {
    "OG_1": "gene's functionA, gene's functionB, gene's functionC",
    "OG_2": "gene's functionM, gene's functionL, gene's functionX",
    "OG_XX": "gene's functionY, gene's functionP, gene's functionR" }
def writeFilesForEveryGroupsFromDict(filename, geneFunctionString):
    geneFunctionFile = open(filename, 'w')
    geneFunctionFile.write(geneFunctionString)
for key in geneFunctionDict.keys() :
    writeFilesForEveryGroupsFromDict(key, geneFunctionDict[key])

相关内容

  • 没有找到相关文章

最新更新