<p>下面的代码提供了问题中所需的输出。
不过,与你原来的帖子相比,有一些事情需要考虑。你知道吗</p>
<pre><code>with open('myData.tab.tab','r') as input_file:
hi = {'ac':{'ab': 'a', 'po':'pb'},
'Tm':{'ab': 'a', 'po':'h'},
'ui':{'ab': 'b', 'po':'h'},
'zb':{'ab': 'f', 'po':'j'}}
columns=[]
for line in input_file:
line = line.strip()
columns.append(line.split('\t'))
output_list = [columns[0]+['ab']]
for row in columns[1:]:
row.append(hi[row[-1]]['ab'])
output_list.append(row)
with open('myData.tab2.tab','w') as output_file:
for row in output_list:
output_file.write("\t".join(row)+'\n')
</code></pre>
<p>当与你原来的文章比较时,文件还是一样打开的。字典仍然是创建的,我只是将文件对象名从<code>file</code>更改为<code>input_file</code>。你知道吗</p>
<p>在这段代码中,创建了一个名为<code>columns</code>的空列表。之后,我们循环文件中的每一行,非常类似于您在代码中所做的。唯一的区别是我们将每一行附加到<code>columns</code>列表中。你知道吗</p>
<p>循环遍历文件中的每一行之后,我们创建一个<code>output_list</code>,在其中添加第一行(带有标题的那一行),并将'ab'字符串添加到headerrow。你知道吗</p>
<p>然后我们循环遍历每一个非标题行和<code>hi</code>字典中对应于每一行的特殊名称的值。然后我们将行添加到<code>output_list</code>。
然后我们打开一个不同的文件,并将输出列表中的每一行写入其中。结果是这个输出(结果是制表符分隔的,所以这里的间隔很小)。你知道吗</p>
<pre><code>Names names_id first second special_name ab
lili 1 a b Tm a
Katrin 2 c d Tm a
Paul 3 e f ui b
bob 4 g h zb f
tina 5 i j ac a
</code></pre>
<p>注意:如果特殊名称列下的任何值不在<code>hi</code>字典中,那么这段代码将为您提供一个<code>KeyError</code>。为了简单起见,我选择了最容易理解的实现。但它是脆弱的<code>KeyError</code></p>
<p>您不必将输出列表写入一个单独的文件,您可以将<code>myData2.tab</code>更改为<code>myData.tab</code>,但是这将从零开始完全重写文件。如果出现任何问题,您可能会丢失原始文件。所以我个人的偏好是(如果可能的话)写一个新文件。这样就不会丢失原始输入。你知道吗</p>