Saya mengulang setiap baris dalam lembar Excel menggunakan impor openpyxl untuk akhirnya membangun string Json besar yang dapat saya masukkan ke API.

Saya mengulang setiap baris dan membangun struktur json saya, saya perlu membagi nilai sel dengan " || " dan kemudian untuk setiap nilai itu perlu ditambahkan sebagai array bersarang di dalam bagian json. Saat ini saya menggunakan kode berikut dan masalah saya adalah saya membangun objek daftar saya di loop for saya dan menambahkan potongan json ke array yang lebih besar dan itu terus menambahkan nilai daftar saya selama setiap loop. Jadi saya menggunakan metode .Clear() pada daftar untuk menghapusnya setelah setiap loop...tetapi kemudian ketika saya mengkompilasi hasil akhir saya, daftar saya kosong. Ini seperti tidak mempertahankan nilainya ketika ditambahkan ke daftar setiap loop. Saya baru mengenal Python dan mencobanya dengan baik. Setiap saran ke arah yang benar akan dihargai. Hampir seperti setiap loop membutuhkan array uniknya sendiri untuk menggunakan dan menyimpan nilainya. Bagian tag dari Json dikosongkan di hasil akhir untuk setiap baris json...ketika itu harus memiliki nilai untuk setiap iterasi unik di dalamnya.

Kumpulan Data Saya (saya memiliki 3 baris di excel). Anda dapat melihat bahwa saya memiliki nilai yang ingin saya bagi di kolom ke-7. Itu adalah kolom yang saya ulangi untuk membagi nilai karena akan bersarang di json saya.

Baris 1 (sel) = "ABC","Pengujian",,"Menguji Lagi",,"DATE",,"DATE",Kosong,"A || B || C".

Baris 2 (sel) = "ABC 2",,"Pengujian 2",,"Menguji Lagi 2",,"DATE",,"DATE",Kosong,"X || Y || Z".

Baris 3 (sel) = "ABC 3", "Pengujian 3", "Pengujian Lagi 3", "TANGGAL", "TANGGAL", Kosong, Kosong.

Kode Saya.

#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))

Dan kemudian hasil yang saya inginkan akan menjadi seperti ini. Saya hanya perlu mencari tahu sintaks yang tepat untuk penanganan daftar ... dan sepertinya tidak dapat menemukan contoh untuk dijadikan dasar.

[
    {
        "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": [           
        ]
    }
]
0
InTeGr87iOn 19 Maret 2020, 23:54

1 menjawab

Jawaban Terbaik

Anda tidak membuat salinan tags saat Anda memasukkannya ke dalam kamus atau memanggil tags.clear(), Anda hanya memasukkan referensi ke daftar yang sama. Anda perlu membuat daftar baru di awal setiap iterasi loop, bukan menggunakan kembali daftar yang sama.

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) 
1
Barmar 19 Maret 2020, 20:59