将字典列表写入csv文件但获取ValueError:dict包含不在字段名中的字段

时间:2015-04-21 13:50:01

标签: python csv dictionary

我找到了答案。而不是写作我需要写作家。

所以正确的代码是这样的:

    #!/usr/bin/env python
    import csv


    def process_cdr():
        f = open(files)
        for lines in f:
            if 'ERS.VA' == lines[39:45]:
                d = {   'mnc'    : lines[13:15],
                        'tac-lb' : lines[52:54],
                'tac-hb' : lines[61:63],
                'TAC' : lines[61:63]+lines[52:54],
                'TAC_DEC' : str(int(lines[61:63]+lines[52:54],16))       
            }

                if '02' in d['mnc']:
                    mnc02.append(d)
                elif '03' in d['mnc']:
                    mnc03.append(d)
                elif '04' in d['mnc']:
                    mnc04.append(d)
                else:
                    pass
            else:
                pass


    mnc02 =[]
    mnc03 =[]
    mnc04 =[]

    files = 'teste.txt'

    process_cdr()

    mnc_02_path = 'tac_mnc02.csv'
    keys_mnc02 = mnc02[0].keys()
    with open(mnc_02_path,'wb') as resultado: 
        dict_writer = csv.DictWriter(resultado, keys_mnc02)
        dict_writer.writeheader()
        dict_writer.writerows(mnc02)

    mnc_03_path = 'tac_mnc03.txt'
    keys_mnc03 = mnc03[0].keys()
    with open(mnc_03_path,'wb') as resultado: 
        dict_writer = csv.DictWriter(resultado, keys_mnc03)
        dict_writer.writeheader()
        dict_writer.writerows(mnc03)

    mnc_04_path = 'tac_mnc04.txt'
    keys_mnc04 = mnc04[0].keys()
    with open(mnc_04_path,'wb') as resultado: 
        dict_writer = csv.DictWriter(resultado, keys_mnc04)
        dict_writer.writeheader()
        dict_writer.writerows(mnc04)

谢谢大家,特别是lapinkoira。 我在这里搜索了很多,但我仍然无法理解我做错了什么。

以下是代码:

    #!/usr/bin/env python
    import csv


    def process_cdr():
        f = open(files)
        for lines in f:
            if 'ERS.VA' == lines[39:45]:
                d = {   'mnc'    : lines[13:15],
                        'tac-lb' : lines[52:54],
                'tac-hb' : lines[61:63],
                'TAC' : lines[61:63]+lines[52:54],
                'TAC_DEC' : str(int(lines[61:63]+lines[52:54],16))       
            }

                if '02' in d['mnc']:
                    mnc02.append(d)
                elif '03' in d['mnc']:
                    mnc03.append(d)
                elif '04' in d['mnc']:
                    mnc04.append(d)
                else:
                    pass
            else:
                pass


    mnc02 =[]
    mnc03 =[]
    mnc04 =[]

    files = 'teste.txt'

    process_cdr()

    mnc_02_path = 'tac_mnc02.csv'
    keys_mnc02 = mnc02[0].keys()
    with open(mnc_02_path,'wb') as resultado: 
        dict_writer = csv.DictWriter(resultado, keys_mnc02)
        dict_writer.writeheader()
        dict_writer.writerow(mnc02)

    mnc_03_path = 'tac_mnc03.txt'
    keys_mnc03 = mnc03[0].keys()
    with open(mnc_03_path,'wb') as resultado: 
        dict_writer = csv.DictWriter(resultado, keys_mnc03)
        dict_writer.writeheader()
        dict_writer.writerow(mnc03)

    mnc_04_path = 'tac_mnc04.txt'
    keys_mnc04 = mnc04[0].keys()
    with open(mnc_04_path,'wb') as resultado: 
        dict_writer = csv.DictWriter(resultado, keys_mnc04)
        dict_writer.writeheader()
        dict_writer.writerow(mnc04)

当我打印字段名称时,例如。 keys_mnc02,我得到:['tac-lb','TAC_DEC','mnc','tac-hb','TAC']

错误始于:

ValueError:dict包含不在字段名中的字段:{'tac-lb':'7e','TAC_DEC':'33150','mnc':'02','tac-hb':'81',' TAC':'817e'},{'tac-lb':'7e','TAC_DEC':'33150','mnc':'02','tac-hb':'81','TAC':' 817e'},{'tac-lb':'EE','TAC_DEC':'32750','mnc':'02','tac-hb':'7F','TAC':'7FEE'}, {'tac-lb':'FC','TAC_DEC':'32252','mnc':'02','tac-hb':'7D','TAC':'7DFC'},{'tac- lb':'C3','TAC_DEC':'32451','mnc':'02','tac-hb':'7E','TAC':'7EC3'},{'tac-lb':' B4','TAC_DEC':'32180','mnc':'02','tac-hb':'7D','TAC':'7DB4'},{'tac-lb':'B9',' TAC_DEC':'32185','mnc':'02','tac-hb':'7D','TAC':'7DB9'},{'tac-lb':'4F','TAC_DEC':' 33103','mnc':'02','tac-hb':'81','TAC':'814F'},{'tac-lb':'4D','TAC_DEC':'33101',' mnc':'02','tac-hb':'81','TAC':'814D'},{'tac-lb':'4E','TAC_DEC':'33102','mnc':' 02','tac-hb':'81','TAC':'814E'},{'tac-lb':'50','TAC_DEC':'33104','mnc':'02',' tac-hb':'81','TAC':'8150'},{'tac-lb':'51','TAC_DEC':'33105','mnc': '02','tac-hb':'81','TAC':'8151'},{'tac-lb':'52','TAC_DEC':'33106','mnc':'02', 'tac-hb':'81','TAC':'8152'},{'tac-lb':'7E','TAC_DEC':'39550','mnc':'02','tac-hb ':'9A','TAC':'9A7E'},{'tac-lb':'65','TAC_DEC':'38501','mnc':'02','tac-hb':'96 ',''TAC':'9665'},{'tac-lb':'66','TAC_DEC':'38502','mnc':'02','tac-hb':'96','TAC ':'9666'},{'tac-lb':'67','TAC_DEC':'38503','mnc':'02','tac-hb':'96','TAC':'9667 '},{'tac-lb':'68','TAC_DEC':'38504','mnc':'02','tac-hb':'96','TAC':'9668'},{ 'tac-lb':'69','TAC_DEC':'38505','mnc':'02','tac-hb':'96','TAC':'9669'},{'tac-lb ':'6A','TAC_DEC':'38506','mnc':'02','tac-hb':'96','TAC':'966A'},{'tac-lb':'6B ','TAC_DEC':'38507','mnc':'02','tac-hb':'96','TAC':'966B'},{'tac-lb':'6C','TAC_DEC ':''38508','mnc':'02','tac-hb':'96','TAC':'966C'},{'tac-lb':'6D','TAC_DEC':'38509 ','mnc':'02','tac-hb':'96','TAC':'966D'},{'tac-lb':'B1','TAC_DEC':'33201','mnc ':'02','tac-hb': '81','TAC':'81B1'},{'tac-lb':'B2','TAC_DEC':'33202','mnc':'02','tac-hb':'81', 'TAC':'81B2'},

等等。

任何人都可以帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用您提供的值,这对我有用:

In [23]: keys_mnc03
Out[23]: ['tac-lb', 'TAC_DEC', 'mnc', 'tac-hb', 'TAC']

mnc03 = huge list of dictionaries

with open("test.txt",'wb') as resultado:
     dict_writer = csv.DictWriter(resultado, keys_mnc03)
     dict_writer.writeheader()
     for d in mnc03:
         dict_writer.writerow(d)

您还可以使用此代码检查字段是否在列表中:

for e in mnc03:
    for key in e.keys():
        if key not in keys_mnc03:
            print "key %s not in keys" % key