Python - 比较文件分隔行中的字符
Python - Comparing files delimiting characters in line
那里。
我是 python 的初学者,我正在努力做到以下几点:
我有一个这样的文件(+10k 行):
EgrG_000095700 /product="ubiquitin carboxyl terminal hydrolase 5"
EgrG_000095800 /product="DNA polymerase epsilon subunit 3"
EgrG_000095850 /product="crossover junction endonuclease EME1"
EgrG_000095900 /product="lysine specific histone demethylase 1A"
EgrG_000096000 /product="charged multivesicular body protein 6"
EgrG_000096100 /product="NADH ubiquinone oxidoreductase subunit 10"
还有这个(+600 行):
EgrG_000076200.1
EgrG_000131300.1
EgrG_000524000.1
EgrG_000733100.1
EgrG_000781600.1
EgrG_000094950.1
第二个文件的所有 ID 都在第一个文件中,所以我希望第一个文件的行与第二个文件的 ID 相对应。
我写了以下脚本:
f1 = open('egranulosus_v3_2014_05_27.tsv').readlines()
f2 = open('eg_es_final_ids').readlines()
fr = open('res.tsv','w')
for line in f1:
if line[0:14] == f2[0:14]:
fr.write('%s'%(line))
fr.close()
print "Done!"
我的想法是搜索 id 的每行分隔字符,以将一个文件的 EgrG_XXXX 与另一个文件相匹配,然后将这些行写入新文件。
我尝试了一些修改,这只是我的想法"core"。
我一无所获。在其中一项修改中,我只有一行。
我会将 f2
中的 ID 存储在一个集合中,然后对照它检查 f1
。
id_set = set()
with open('eg_es_final_ids') as f2:
for line in f2:
id_set.add(line[:-2]) #get rid of the .1
with open('egranulosus_v3_2014_05_27.tsv') as f1:
with open('res.tsv', 'w') as fr:
for line in f1:
if line[:14] in id_set:
fr.write(line)
f2 是文件 2 中的行列表。您在哪里遍历列表,就像您对 file-1 (f1) 中的行所做的那样。
这似乎是问题所在。
with open('egranulosus_v3_2014_05_27.txt', 'r') as infile:
line_storage = {}
for line in infile:
data = line.split()
key = data[0]
value = line.replace('\n', '')
line_storage[key] = value
with open('eg_es_final_ids.txt', 'r') as infile, open('my_output.txt', 'w') as outfile:
for line in infile:
lookup_key = line.split('.')[0]
match = line_storage.get(lookup_key)
outfile.write(''.join([str(match), '\n']))
那里。 我是 python 的初学者,我正在努力做到以下几点:
我有一个这样的文件(+10k 行):
EgrG_000095700 /product="ubiquitin carboxyl terminal hydrolase 5"
EgrG_000095800 /product="DNA polymerase epsilon subunit 3"
EgrG_000095850 /product="crossover junction endonuclease EME1"
EgrG_000095900 /product="lysine specific histone demethylase 1A"
EgrG_000096000 /product="charged multivesicular body protein 6"
EgrG_000096100 /product="NADH ubiquinone oxidoreductase subunit 10"
还有这个(+600 行):
EgrG_000076200.1
EgrG_000131300.1
EgrG_000524000.1
EgrG_000733100.1
EgrG_000781600.1
EgrG_000094950.1
第二个文件的所有 ID 都在第一个文件中,所以我希望第一个文件的行与第二个文件的 ID 相对应。
我写了以下脚本:
f1 = open('egranulosus_v3_2014_05_27.tsv').readlines()
f2 = open('eg_es_final_ids').readlines()
fr = open('res.tsv','w')
for line in f1:
if line[0:14] == f2[0:14]:
fr.write('%s'%(line))
fr.close()
print "Done!"
我的想法是搜索 id 的每行分隔字符,以将一个文件的 EgrG_XXXX 与另一个文件相匹配,然后将这些行写入新文件。 我尝试了一些修改,这只是我的想法"core"。 我一无所获。在其中一项修改中,我只有一行。
我会将 f2
中的 ID 存储在一个集合中,然后对照它检查 f1
。
id_set = set()
with open('eg_es_final_ids') as f2:
for line in f2:
id_set.add(line[:-2]) #get rid of the .1
with open('egranulosus_v3_2014_05_27.tsv') as f1:
with open('res.tsv', 'w') as fr:
for line in f1:
if line[:14] in id_set:
fr.write(line)
f2 是文件 2 中的行列表。您在哪里遍历列表,就像您对 file-1 (f1) 中的行所做的那样。 这似乎是问题所在。
with open('egranulosus_v3_2014_05_27.txt', 'r') as infile:
line_storage = {}
for line in infile:
data = line.split()
key = data[0]
value = line.replace('\n', '')
line_storage[key] = value
with open('eg_es_final_ids.txt', 'r') as infile, open('my_output.txt', 'w') as outfile:
for line in infile:
lookup_key = line.split('.')[0]
match = line_storage.get(lookup_key)
outfile.write(''.join([str(match), '\n']))