这就是我想要完成的任务:输入与定义词典中的键对应的项目的文本文件列表,让程序打印该列表中所有键的所有值。如您所见,字典设置为包含每个键的多个值。字典报告单个键的值很好,但是我在尝试使用它来报告多个键的值(在文本文件列表中定义)时遇到了问题。
以下是代码:
# open the text file containing a list that will be looked up in the dictionary below
with open('/home/matt/Source/python/fpkm-batch-lookup/lookuplist.txt', 'r') as lookupfile:
lookup = str(lookupfile.read().splitlines())
# define output file
output = open('/home/matt/Source/python/fpkm-batch-lookup/output.csv', 'w')
# assign keydict dictionary keys and values as columns in input file
keydict = {}
data = open('/home/matt/Source/python/fpkm-lookup/input.csv', 'r')
for line in data:
items = line.rstrip('\n').split(',')
key, values = items[0], items[1:]
keydict[key] = values
# write out key and values to output file
output.write(lookup + '\n' + str(keydict['Alt Name']) + '\n' + str(keydict[lookup]) + '\n')
尝试运行它,它返回:
Traceback (most recent call last):
File "/home/matt/Source/python/fpkm-batch-lookup/run.py", line 17, in <module>
output.write(lookup + '\n' + str(keydict['Alt Name']) + '\n' + str(keydict[lookup]) + '\n')
KeyError: "['ENSG00000196476_C20orf96', 'ENSG00000247315_ZCCHC3', 'ENSG00000225377_RP5-1103G7.4', 'ENSG00000177732_SOX12', 'ENSG00000101255_TRIB3']"
KeyError消息中列出的项目是lookuplist文本文件中的项目。我的代码是否将整个lookuplist文件视为查找的关键?我怎么能让它把这个文件中的每一行视为一个要查找的键呢?
谢谢!
编辑/更新:
使用[0],[1]等指定每个键进行查找然后写入输出文件的相当不优雅的方法。这是我使用的最终代码:
# open the text file containing a list that will be looked up in the dictionary below
lookuplist = open('/home/matt/Source/python/fpkm-batch-lookup/lookuplist.txt').read().splitlines()
# define output file
output = open('/home/matt/Source/python/fpkm-batch-lookup/output.csv', 'w')
# assign keydict dictionary keys and values as columns in input file
keydict = {}
data = open('/home/matt/Source/python/fpkm-lookup/input.csv', 'r')
for line in data:
items = line.rstrip('\n').split(',')
key, values = items[0], items[1:]
keydict[key] = values
# write out key and values to output file - add more if needed
output.write(str(lookuplist[0]) + '\n' + str(keydict['Alt Name']) + '\n' + str(keydict[lookuplist[0]]) + '\n' + '\n')
output.write(str(lookuplist[1]) + '\n' + str(keydict['Alt Name']) + '\n' + str(keydict[lookuplist[1]]) + '\n' + '\n')
output.write(str(lookuplist[2]) + '\n' + str(keydict['Alt Name']) + '\n' + str(keydict[lookuplist[2]]) + '\n' + '\n')
# .... to the nth string number to lookup
想象我更新,对于其他任何想要做同样事情的人来说。
答案 0 :(得分:1)
我想如果你改变了
with open('/home/matt/Source/python/fpkm-batch-lookup/lookuplist.txt', 'r') as lookupfile:
lookup = str(lookupfile.read().splitlines())
到
with open('/home/matt/Source/python/fpkm-batch-lookup/lookuplist.txt', 'r') as lookupfile:
lookup = lookupfile.read().splitlines()
你应该更近了
但是,我认为您希望一次一个地查找查找列表中的项目,因为查找是一个列表
再次查看你的代码我已经做了一些更改 我不完全确定你在做什么,但是像
那样for key in lookup:
if key in keydict:
output.write(key + '\n' + ','.join(keydict[key]) + '\n' +key +'\n')
我真的很感觉我的方式,但这是我可以根据你的问题得到你的输出。我无法找到对“替代名称”的引用。并且您的代码没有说明如何在字典中访问该密钥,因此我假设它是最初读取的文件中的值。