简体   繁体   中英

Is there a csv.DictWriter within Xlsxwriter?

I have a program that does this:

I read some information, than put that to a dictionary, then I append those dictionaries to a list, so I have a list of dicts...

What I was doing is: Using csv function, csv.DictWriter and creating three different files.

I was searching and I found out about a module called xlsxwriter, that can be used to create an EXCEL WORKBOOK.

I searched but I couldn't find any solution similar to DictWrite in Xlsxwriter, does any one knows if there is any?

What I did was a poor workaround that didn`t quite satisfied me.

If anyone has any suggestions, I would be pleased.

Here is my code:

#!/usr/bin/env python
import csv, collections, xlsxwriter

def find_between( s, first, last ):
    try:
        start = s.index( first ) + len( first )
        end = s.index( last, start )
        return s[start:end]
    except ValueError:
        return "ERROR"

def process_tac_dump():
    f = open(files)
    for lines in f:
        if 'ERS.VA' == lines[39:45]:
            d = (   ('mnc', lines[12: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))),
                    ('GGSN', find_between(lines,'vip-s11.', '.node.epc' )),
                    ('ORDER', find_between(lines, 'IN NAPTR ', ' 65525')),
                    ('Servicos', find_between(lines, 'x-3gpp-sgw:', '" "" topoff'))
                )

            d = collections.OrderedDict(d)

            if '002' in d['mnc']:
                if "ERROR" in d['GGSN']:
                    pass
                elif "x-s11:x-s8-gtp" not in d['Servicos']:
                    mnc02.append(d)
                    #Procedimento de configuração novo
                    delete_tac_naptrrecord_mnc02.append('delete naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -where container=GPRS')
                    create_naptrrecord_mnc02.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order=10;preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s8-gtp";regexp="";replacement=topoff.vip-s11.GPRJO2.node.epc.mnc002.mcc724.3gppnetwork.org.;container=GPRS')
                    create_naptrrecord_mnc02.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order='+d['ORDER']+';preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s5-gtp";regexp="";replacement=topoff.vip-s11.'+d['GGSN']+'.node.epc.mnc002.mcc724.3gppnetwork.org.;container=GPRS')
                    #Procedimento de FallBack
                    fallback_naptrrecord_mnc02.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order=10;preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s8-gtp";regexp="";replacement=topoff.vip-s5s8.GPRJO2.node.epc.mnc002.mcc724.3gppnetwork.org.;container=GPRS')
                    fallback_naptrrecord_mnc02.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order='+d['ORDER']+';preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s5-gtp";regexp="";replacement=topoff.vip-s5s8.'+d['GGSN']+'.node.epc.mnc002.mcc724.3gppnetwork.org.;container=GPRS')
                    #fallback_naptrrecord_mnc02.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order='+d['ORDER']+';preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s5-gtp";regexp="";replacement=topoff.vip-s5s8.'+d['GGSN']+'.node.epc.mnc003.mcc724.3gppnetwork.org.;container=GPRS')
                    #fallback_naptrrecord_mnc02.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order='+d['ORDER']+';preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s5-gtp";regexp="";replacement=topoff.vip-s5s8.'+d['GGSN']+'.node.epc.mnc004.mcc724.3gppnetwork.org.;container=GPRS')

            elif '003' in d['mnc']:
                if "ERROR" in d['GGSN']:
                    pass
                elif "x-s11:x-s8-gtp" not in d['Servicos']:
                    mnc03.append(d)
                    #Procedimento de configuração novo
                    delete_tac_naptrrecord_mnc03.append('delete naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -where container=GPRS')
                    create_naptrrecord_mnc03.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order=10;preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s8-gtp";regexp="";replacement=topoff.vip-s11.GPSPO2.node.epc.mnc003.mcc724.3gppnetwork.org.;container=GPRS')
                    create_naptrrecord_mnc03.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order='+d['ORDER']+';preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s5-gtp";regexp="";replacement=topoff.vip-s11.'+d['GGSN']+'.node.epc.mnc003.mcc724.3gppnetwork.org.;container=GPRS')
                    #Procedimento de FallBack
                    fallback_naptrrecord_mnc03.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order=10;preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s8-gtp";regexp="";replacement=topoff.vip-s5s8.GPSPO2.node.epc.mnc003.mcc724.3gppnetwork.org.;container=GPRS')
                    #fallback_naptrrecord_mnc03.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order='+d['ORDER']+';preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s5-gtp";regexp="";replacement=topoff.vip-s5s8.'+d['GGSN']+'.node.epc.mnc002.mcc724.3gppnetwork.org.;container=GPRS')
                    fallback_naptrrecord_mnc03.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order='+d['ORDER']+';preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s5-gtp";regexp="";replacement=topoff.vip-s5s8.'+d['GGSN']+'.node.epc.mnc003.mcc724.3gppnetwork.org.;container=GPRS')
                    #fallback_naptrrecord_mnc03.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order='+d['ORDER']+';preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s5-gtp";regexp="";replacement=topoff.vip-s5s8.'+d['GGSN']+'.node.epc.mnc004.mcc724.3gppnetwork.org.;container=GPRS')

            elif '004' in d['mnc']:
                if "ERROR" in d['GGSN']:
                    pass
                elif "x-s11:x-s8-gtp" not in d['Servicos']:
                    mnc04.append(d)
                    #Procedimento de configuração novo
                    delete_tac_naptrrecord_mnc04.append('delete naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -where container=GPRS')
                    create_naptrrecord_mnc04.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order=10;preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s8-gtp";regexp="";replacement=topoff.vip-s11.GPRJO2.node.epc.mnc004.mcc724.3gppnetwork.org.;container=GPRS')
                    create_naptrrecord_mnc04.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order='+d['ORDER']+';preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s5-gtp";regexp="";replacement=topoff.vip-s11.'+d['GGSN']+'.node.epc.mnc004.mcc724.3gppnetwork.org.;container=GPRS')
                    #Procedimento de FallBack
                    fallback_naptrrecord_mnc04.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order=10;preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s8-gtp";regexp="";replacement=topoff.vip-s5s8.GPRJO2.node.epc.mnc004.mcc724.3gppnetwork.org.;container=GPRS')
                    #fallback_naptrrecord_mnc04.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order='+d['ORDER']+';preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s5-gtp";regexp="";replacement=topoff.vip-s5s8.'+d['GGSN']+'.node.epc.mnc002.mcc724.3gppnetwork.org.;container=GPRS')
                    #fallback_naptrrecord_mnc04.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order='+d['ORDER']+';preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s5-gtp";regexp="";replacement=topoff.vip-s5s8.'+d['GGSN']+'.node.epc.mnc003.mcc724.3gppnetwork.org.;container=GPRS')
                    fallback_naptrrecord_mnc04.append('create naptrrecord tac-lb'+d['tac-lb']+'.tac-hb'+d['tac-hb']+'.tac.epc.mnc'+d['mnc']+'.mcc724.3gppnetwork.org. -set order='+d['ORDER']+';preference=65525;flags="a";service="x-3gpp-sgw:x-s11:x-s5-gtp";regexp="";replacement=topoff.vip-s5s8.'+d['GGSN']+'.node.epc.mnc004.mcc724.3gppnetwork.org.;container=GPRS')




#Listas para configuração S11
delete_tac_naptrrecord_mnc02 = []
delete_tac_naptrrecord_mnc03 = []
delete_tac_naptrrecord_mnc04 = []
create_naptrrecord_mnc02 = []
create_naptrrecord_mnc03 = []
create_naptrrecord_mnc04 = []
create_node_arecord_vip_s11 = []

#Listas para Fallback
fallback_naptrrecord_mnc02 = []
fallback_naptrrecord_mnc03 = []
fallback_naptrrecord_mnc04 = []
fallback_delete_tac_naptrrecord_mnc02 = []
fallback_delete_tac_naptrrecord_mnc03 = []
fallback_delete_tac_naptrrecord_mnc04 = []

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

files = 'teste.txt'
workbook = xlsxwriter.Workbook('TAC_DUMP.xlsx')
worksheet_script_mnc02 = workbook.add_worksheet('MNC02')
worksheet_script_mnc03 = workbook.add_worksheet('MNC03')
worksheet_script_mnc04 = workbook.add_worksheet('MNC04')
worksheet_mnc02 = workbook.add_worksheet('MNC02_TAC')
worksheet_mnc03 = workbook.add_worksheet('MNC03_TAC')
worksheet_mnc04 = workbook.add_worksheet('MNC04_TAC')

#Processa a função principal
process_tac_dump()

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.csv'
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.csv'
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)

mnc_02_gambiarra = [] 
with open (mnc_02_path) as f:
    for lines in f:
        mnc_02_gambiarra.append(lines)

mnc_03_gambiarra = [] 
with open (mnc_03_path) as f:
    for lines in f:
        mnc_03_gambiarra.append(lines)

mnc_04_gambiarra = [] 
with open (mnc_04_path) as f:
    for lines in f:
        mnc_04_gambiarra.append(lines)



worksheet_script_mnc02.write_column('A1', create_naptrrecord_mnc02)
worksheet_script_mnc03.write_column('A1', create_naptrrecord_mnc03)
worksheet_script_mnc04.write_column('A1', create_naptrrecord_mnc04)
worksheet_mnc02.write_column('A1', mnc_02_gambiarra)
worksheet_mnc03.write_column('A1', mnc_03_gambiarra)
worksheet_mnc04.write_column('A1', mnc_04_gambiarra)
workbook.close()

Please try out my wrapper library pyexcel , which does not help you directly but the library provide one interface to read, write csv and xlsx files.

Here's the sample code:

>>> from collections import OrderedDict
>>> import pyexcel as pe # csv support by default
>>> import pyexcel.ext.xlsx # for xlsx format support, pip install pyexcel-xlsx
>>> # import pyexcel.ext.xls # for xls format support, pip install pyexcel-xls
>>> # import pyexcel.ext.ods # for xls format support, pip install pyexcel-ods
>>> sample_dict = OrderedDict()
>>> sample_dict.update({"Column 1": [1,2,3,4,5]})
>>> sample_dict.update({"Column 2": [6,7,8,9,10]})
>>> pe.save_as(adict=sample_dict, out_file="your_file.xlsx")
>>> pe.save_as(adict=sample_dict, out_file="your_file.csv")
>>> # pe.save_as(adict=sample_dict, out_file="your_file.xls")
>>> # pe.save_as(adict=sample_dict, out_file="your_file.ods")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM