У меня есть файл csv с данными, как показано ниже
XPATH,ColumName,CSV_File_Name,ParentKey
/integration-outbound:IntegrationEntity/integrationEntityDetails/supplier/forms/form[]/id,id,integrationEntityDetailsForms.csv,
/integration-outbound:IntegrationEntity/integrationEntityHeader/attachments/attachment[]/id,aid,integrationEntityDetailsForms.csv,
/integration-outbound:IntegrationEntity/integrationEntityDetails/supplier/forms/form[]/records/record[]/Internalid,Internalid,integrationEntityDetailsForms.csv,
/integration-outbound:IntegrationEntity/integrationEntityDetails/supplier/forms/form[]/records/record[]/isDelete,FormId,integrationEntityDetailsForms.csv,
/integration-outbound:IntegrationEntity/integrationEntityDetails/supplier/forms/form[]/records/record[]/fields/field[]/id,SupplierFormRecordFieldId,integrationEntityDetailsForms.csv,
/integration-outbound:IntegrationEntity/integrationEntityDetails/supplier/forms/form[]/records/record[]/fields/field[]/value,SupplierFormRecordFieldValue,integrationEntityDetailsForms.csv,
/integration-outbound:IntegrationEntity/integrationEntityHeader/integrationTrackingNumber,integrationTrackingNumber,integrationEntityDetailsForms.csv,Y
/integration-outbound:IntegrationEntity/integrationEntityHeader/referenceCodeForEntity,referenceCodeForEntity,integrationEntityDetailsForms.csv,Y
/integration-outbound:IntegrationEntity/integrationEntityDetails/supplier/requestId,requestId,integrationEntityDetailsForms.csv,Y
/integration-outbound:IntegrationEntity/integrationEntityDetails/supplier/id,supplier_id,integrationEntityDetailsForms.csv,Y
образец файла csv
Я хотел создать словарь списка, который в основном будет таким разделить на [] и поместить все, поместить [0] в первый список для каждого элемента. удалить записи, у которых нет []. Это даст список тегов на каждом уровне.
{ 1 : ['integration-outbound:IntegrationEntity.integrationEntityDetails.supplier.forms.form', 'integration-outbound:IntegrationEntity.integrationEntityHeader.attachments.attachment'] , 2 : ['integration-outbound:IntegrationEntity.integrationEntityDetails.supplier.forms.form.records.record'] , 3 : ['integration-outbound:IntegrationEntity.integrationEntityDetails.supplier.forms.form.records.record.fields.field'] }
до тех пор, пока я не разделил строку с помощью [], преобразовав / в. и список разбивается и накапливается. Но я застрял в возвращении к словарю списка. Это даст мне уровень, на котором каждый тег
df_process_sub_explode_Level
дает отдельную строку для каждой строки в этом CSV, но необходимо удалить дубликаты и popualte в dict.
CSV_File_Name = []
with open(process_config_csv, newline='') as csvfile:
DataCaptured = csv.DictReader(csvfile)
for row in DataCaptured:
if row['CSV_File_Name'] not in CSV_File_Name:
CSV_File_Name.append(row['CSV_File_Name'])
df_process = []
df_process_all_col = []
df_process_explode_Level = dict()
for items in CSV_File_Name:
df_subset_process = []
df_subset_list_all_cols = []
with open(process_config_csv, newline='') as csvfile:
DataCaptured = csv.DictReader(csvfile)
for row in DataCaptured:
df_process_sub_explode_Level = []
if row['CSV_File_Name'] in items:
df_subset_process.append(row['XPATH'].replace("/",".").split('[]')[0].replace(".","",1))
df_subset_list_all_cols.append(row['XPATH'].replace("/",".").replace("[]","").replace(".","",1))
if "[]" in row['XPATH']:
print(row['XPATH'])
df_process_sub_explode_Level=row['XPATH'].replace("/",".").replace(".","",1).split('[]')
del df_process_sub_explode_Level[-1]
df_process_sub_explode_Level = list(accumulate(df_process_sub_explode_Level))
for explodeitems in range(len(df_process_sub_explode_Level)):
df_process_explode_Level[explodeitems].append(df_process_sub_explode_Level[explodeitems])
Ошибка:
Traceback (most recent call last):
File "<stdin>", line 17, in <module>
KeyError: 0
Пожалуйста, помогите в возврате к dict списка.