Slik tømmer en matrise og nullstille verdiene i en for loop mens bygge et JSON streng?

stemmer
0

Jeg er i sløyfe gjennom hver rad i et Excel-ark ved hjelp av openpyxl import til slutt bygge en stor Json streng som jeg kan mate til en API.

Jeg looping gjennom hver rad og bygge ut min json struktur, trenger jeg å dele en celleverdi med ||, og deretter for hver verdi det er behov for å bli lagt til som en sammensatt gruppe inne i en json delen. Jeg har for tiden jeg bruker følgende kode og problemet mitt er at jeg bygge min liste objekt i min for loop og legge JSON blings til et større utvalg, og det holder å legge mine listeverdiene i løpet av hver loop. Så jeg brukte .Clear () metoden på listen for å fjerne den etter hver sløyfe ... men så når jeg kompilere min endelige resultatet listen min er tom. Dens som det opprettholder ikke sin verdier når det blir lagt til listen hver sløyfe. Jeg er ny på Python og ga det en god virvel. Eventuelle forslag i riktig retning ville være verdsatt. Sine nesten som hver sløyfe trenger sin egen unike utvalg å bruke og holde verdiene. Den tags delen av Json tømmes i det endelige resultatet for hver json tråd ... når det skal ha verdiene for hver unike køyring i den.

Min datasett (jeg har 3 rader i excel). Du kan se at jeg har verdier som jeg ønsker å dele i syvende kolonne. Det er kolonnen jeg looping gjennom å dele verdiene som de vil være nestet i min json.

Rekke 1 (celler) = ABC, Testing, Testing igjen, DATE, DATE, tom, A || || B C.

Rad 2 (celler) = ABC 2, Testing 2, Testing Igjen 2, DATE, DATE tom X || || Y Z.

3.p (celler) = ABC 3, Testing 3, Testing Igjen 3, DATE, DATE, Tom, tom.

Min Code.

#from openpyxl import Workbook
import json
from openpyxl import load_workbook

output_table = input_table.copy()

var_path_excel_file = flow_variables['Location']

workbook = load_workbook(filename=var_path_excel_file)
sheet = workbook.active

#create a null value to be used
emptyString = Null

#list out all of the sections of the json that we want to print out - these are based on the inputs
jsonFull = []
jsondata = {}
tags = []

for value in sheet.iter_rows(min_row=2,min_col=0,max_col=40,values_only=True):  

    #I add my split values to an array so that way when i add the array to the json it will have the proper brackets i need for the API to run correctly
    if value[6] is not None:
        data = value[6].split( || )
        for temp in data:           
            tags.append(temp)           

    #I build out the json structure here that will be added for each excel row basically
    jsondata = {
        name: value[0],
        short_description: value[1],
        long_description: value[2],
        effective_start_date: value[3],
        effective_end_date: value[4],
        workflow_state: emptyString,              
        tags: tags
        }

    #Add the jsondata row to the larger collection
    jsonFull.append(jsondata)   
    tags.clear()

print(json.dumps(jsonFull))

Og så min ønskede resultatet ville bli noe sånt som dette. Jeg trenger bare å finne ut riktig syntaks for listen håndtering ... og kan ikke synes å finne et eksempel til basen ut av.

[
    {
        name: ABC, 
        short_description: Testing, 
        long_description: Testing Again, 
        effective_start_date: 2020-03-04T14:45:22Z, 
        effective_end_date: 2020-03-04T14:45:22Z, 
        workflow_state: Null, 
        tags: [
            A,
            B,
            C
        ]
    }, 
    {
        name: ABC 2, 
        short_description: Testing 2, 
        long_description: Testing Again 2, 
        effective_start_date: 2020-03-04T14:45:22Z, 
        effective_end_date: 2020-03-04T14:45:22Z, 
        workflow_state: Null, 
        tags: [
            X,
            Y,
            Z
        ]
    }, 
    {
        name: ABC 3, 
        short_description: Testing 3, 
        long_description: Testing Again 3, 
        effective_start_date: 2020-03-04T14:45:22Z, 
        effective_end_date: 2020-03-04T14:45:22Z, 
        workflow_state: Null, 
        tags: [           
        ]
    }
]
Publisert på 19/03/2020 klokken 21:54
kilden bruker
På andre språk...                            


1 svar

stemmer
0

Du er ikke å lage en kopi av tagsnår du setter den inn i ordlisten eller ringe tags.clear(), du er bare å sette en referanse til den samme listen. Du må opprette en ny liste ved begynnelsen av hver sløyfe iterasjon, ikke bruke den samme listen.

for value in sheet.iter_rows(min_row=2,min_col=0,max_col=40,values_only=True):  

    #I add my split values to an array so that way when i add the array to the json it will have the proper brackets i need for the API to run correctly
    if value[6] is not None:
        tags = value[6].split(" || ")
    else:
        tags = []         

    #I build out the json structure here that will be added for each excel row basically
    jsondata = {
        "name": value[0],
        "short_description": value[1],
        "long_description": value[2],
        "effective_start_date": value[3],
        "effective_end_date": value[4],
        "workflow_state": emptyString,              
        "tags": tags
        }

    #Add the jsondata row to the larger collection
    jsonFull.append(jsondata) 
Svarte 19/03/2020 kl. 21:59
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more