<pre><code>import csv
# Reading the first db is simple since there's only a fixed delimiter
# Use csv module to split the lines and create a dictionary that maps id to name
id_dictionary = {}
with open('db_1.txt', 'r') as infile:
reader = csv.reader(infile, delimiter='\t')
for line in reader:
id_dictionary[line[1]] = line[0]
# We can again split on tab but that will return 'name1,name2' etc as a single
# string that we call split() on later.
row_data = []
with open('db_2.txt', 'r') as infile:
reader = csv.reader(infile, delimiter='\t')
for line in reader:
# ID remains unchanged, so keep the first value
row = [line[0]]
# Split the string into individual elements in a list
id_codes = line[1].split(',')
# List comprehension to look for ID in the dictionary and return the
# name stored against it
translated = [id_dictionary.get(item) for item in id_codes]
# Add translated to the list that we are using to represent a row
row.extend(translated)
# Append the row to our collection of rows
row_data.append(row)
with open('db_3.txt', 'w') as outfile:
for row in row_data:
outfile.write(row[0])
outfile.write('\t')
outfile.write(','.join(map(str,row[1:]))) # Join values by a comma
outfile.write('\n')
</code></pre>