擅长:python、mysql、java
<p>这需要很长时间,因为你要将每一封被排除的电子邮件与每一封旧的电子邮件记录进行比较(750万乘以1000万等于75万亿次循环迭代…)。你知道吗</p>
<p>主要有三个改进。你知道吗</p>
<p>首先,索引不能为每个记录更改,因此不要为每个迭代重新计算索引,因为每个列表中的第一个条目是标题,所以将其从搜索中排除(如果新旧电子邮件标题字段的大写方式不同,则输出文件中可能会随机出现多个标题):</p>
<pre><code>new_email_index = get_email_index(new_emails_list[0])
old_email_index = get_email_index(old_emails_list[0])
s_new_emails = set([row[new_email_index] for row in new_emails_list[1:]])
s_old_emails = set([row[old_email_index] for row in old_emails_list[1:]])
</code></pre>
<p>在构建最终记录列表时,旧的电子邮件索引将非常有用。你知道吗</p>
<p>把除外责任作为一个整体</p>
<pre><code>exclusion_emails = s_old_emails - s_new_emails
</code></pre>
<p>当你建造除外责任.tsv,遍历旧的声明列表,以便获取电子邮件地址(使用上面已保存的索引,而不是每次重新计算)</p>
<pre><code>with open('exclusions.tsv', 'wb') as tsvfile:
writer = csv.writer(tsvfile, delimiter='\t')
for row in old_emails_list[1:]:
print str(row[old_email_index])
if row[old_email_index] in exclusion_emails:
writer.writerow(row)
</code></pre>
<p>最后,exclusion\u rows在末尾是一个空列表,因为您的代码实际上没有向exclusion\u rows添加任何内容,所以不要让它打印的0的长度迷惑您。你知道吗</p>