例如,我在一个名为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))
但它似乎根本不起作用,我可能忘记了一些事情。有没有人有想法来解决我的问题?感谢您即将回答!
-
取下
if not len(key) != len(aDict)
和break
。您可能想做的是在迭代所有键后停止循环。然而
key
是'OG_1'
之一,'OG_2'
,'OG_XX'
,它不是计数器或类似的东西。 -
将
open("key", "w")
替换为open(key + ".txt", "w")
。open("key", "w")
的意思是"打开一个名为key
的文件进行写入"。但是您要做的是"打开一个名为<the key of the dictionary>.txt
的文件" 这意味着您需要键的值和.txt后缀。 -
将
f.append
替换为f.write
。这就是将字符串写入文件的方式。
-
使用
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])