我是初学者,我的代码需要帮助。
我有两个列表格式的文件,我想用作词典。两个文件的格式相同。第1列具有键,第2列具有由“|”分隔的关联值。两个文件中可能不存在所有密钥。
实施例: FILE1.TXT
1 b|c
2 a|b|d
3 a|b|c
4 a|b
9 a|b|c
FILE2.TXT
1 a|c
2 a|b|c|d|e
3 a|b|c
6 a|b|c
7 a|b|c
8 a|b|c
9 x|y
我想创建一个文件File3.txt,它具有每个键的公共值,并表示每个键。当密钥在两个列表中不常见且“无匹配”时密钥是常见但没有共享共同值的空白单元格。 (最后一部分是事后的想法,所以它不会出现在我的代码中。)
例如: File3.txt
1 c
2 a|b|d
3 a|b|c
4
6
7
8
9 no matches
以下是我到目前为止编写的代码。我想我完全不喜欢,但感谢任何帮助。谢谢!
#!/usr/bin/env python
table = {}
ref2gene = {}
table2 = {}
ref2gene2 = {}
with open('File1.txt') as f_in:
for line in f_in:
row = line.strip()
table[line.split('\t')[0]] = line.split('\t')[1]
gene_name = row[0]
for ref in row[1].split('|'):
ref2gene[ref] = gene_name
with open('File2.txt') as f_1, open('File3.txt', 'w') as f_2:
for line in f_1:
row2 = line.strip()
table2[line.split('\t')[0]] = line.split('\t')[1]
gene_name2 = row2[0]
for ref2 in row2[1].split('|'):
ref2gene2[ref2] = gene_name2
def intersect_two_dicts (table, table2):
return { k:v for k,v in table.iteritems() if ((k in table2)and(table[k]==table2[k])) }
print (intersect_two_dicts(dicts[0], dicts[1]))
答案 0 :(得分:0)
使用dictonary尝试这种方法我们可以解决此问题,只需将print
替换为文件write
file1=open('a.txt','r')
file1=file1.readlines()
file1={i.split()[0]:i.split()[1] for i in file1}
print file1
#{'1': 'a|c', '3': 'a|b|c', '2': 'a|b|c|d|e', '7': 'a|b|c', '6': 'a|b|c', '9': 'x|y', '8': 'a|b|c'}
file2=open('b.txt','r')
file2=file2.readlines()
file2={i.split()[0]:i.split()[1] for i in file2}
print file2
#{'1': 'b|c', '9': 'a|b|c', '3': 'a|b|c', '2': 'a|b|d', '4': 'a|b'}
keys=set(file1.keys()+file2.keys())
for i in sorted(keys):
if i in file1 and i in file2:
file1_values=file1[i].split('|')
file2_values=file2[i].split('|')
intersec=set(file1_values)&set(file2_values)
if len(intersec)>0:
print i,'|'.join(intersec)
else:print i, 'missing values'
else:
print i,'empty'
1 c
2 a|b|d
3 a|c|b
4 empty
6 empty
7 empty
8 empty
9 missing values