读取文件并写入dict列表会使所有列表项目相同 - 最后插入的项目

时间:2015-09-08 07:26:11

标签: python list dictionary

我正在阅读文本文件,并以list of dict的形式将每一行写入两个文件中的一个。在我检查结束时,pickle包含dict列表。但每个dict项目都是相同的,这是最后插入的项目。

这里的逻辑是,如果选择是1,则加入谣言列表,2然后加入norumour列表,3然后中断。

此代码中的错误是什么:

fp = open('130615.txt', 'r')
count1 = 1
count2 = 1
result = {}
final_result_rumour = []
final_result_norumour = []
for val in fp.readlines():
    temp = val.split('|')
    try:
        result['script_code'] = temp[0]
        result['company'] = temp[1]
        result['subject'] = temp[2]
        result['date'] = temp[3]
        result['link'] = temp[4]
        result['description'] = get_description(result['link'])
        if 'merge' in temp[2]  or 'buy' in temp[2]  or 'sale' in temp[2]  or 'tie-up' in temp[2]  or 'tie' in temp[2]  or 'acquire' in temp[2]  or 'amalgamation' in temp[2]  or 'purchase' in temp[2]  or 'amalgamate' in temp[2] or 'acquisition' in temp[2]:
            f1 = open('suspected.txt','a')
            print temp[2]
            flag = raw_input("Enter your choice - ")
            if flag == '1':
                #1.write(temp[2]+'\n')
                print "Rumour suspected : ", count1
                count1 += 1
                final_result_rumour.append(result)
                output1 = open('rumours.pkl', 'wb')
                pickle.dump(final_result_rumour, output1)
                output1.close()
            elif flag == '2':
                print "No Rumour suspected : ", count2
                count2 += 1
                final_result_norumour.append(result)
                output2 = open('norumours.pkl', 'wb')
                pickle.dump(final_result_norumour, output2)
                output2.close()
            elif flag == '3':
                confirm = raw_input('You want to proceed ? ')
                if confirm == '1':
                    break
        else:
            print "No Rumour suspected : ", count2
            count2 += 1
            final_result_norumour.append(result)
            output2 = open('norumours.pkl', 'wb')
            pickle.dump(final_result_norumour, output2)
            output2.close()
    except:
        pass

1 个答案:

答案 0 :(得分:3)

您正在为每个列表添加相同的 result字典,只是在每次迭代中更改其先前的内容。试试这个:

...
try:
    result = {} # create new dict
    result['script_code'] = temp[0]
    ...

此外,您似乎也在每次迭代中对结果文件进行pickle-dump。你只需要在循环之后执行一次。