0
votes

Fractionnement d'ensembles d'éléments séparés concaténés en une seule chaîne avec un délimiteur ','

J'essaie de séparer ce type de données en utilisant python:

['ALCOHOL','BREAD','CAKES AND SWEETS','FRUIT AND VEGETABLES','MILK AND DAIRY PRODUCTS'],['BREAD','CAKES AND SWEETS','DIPS','MILK AND DAIRY PRODUCTS','PASTA'],['HOT FOOD','OTHERS'],['ALCOHOL','BREAD','CAKES AND SWEETS'],['BREAD','CAKES AND SWEETS','FRUIT AND VEGETABLES','MILK AND DAIRY PRODUCTS','OTHERS','SNACKS','SPICES','WATER'],['BREAD','CAKES AND SWEETS','FRUIT AND VEGETABLES'],['BREAD','CAKES AND SWEETS']

En ce moment, je divise la chaîne en utilisant '], [' mais il semble que lorsque les chaînes sont fractionnées, les caractères utilisés pour le fractionnement sont perdus. Existe-t-il un moyen de diviser cette chaîne tout en conservant les caractères avec lesquels je partage?


2 commentaires

Pouvez-vous montrer à quoi vous voulez que la sortie ressemble?


Je suppose que vous pouvez le faire avec re.split ().


3 Réponses :


0
votes

Vérifiez ceci :

x code> est votre chaîne et d est votre délimiteur

print(re.split('(\],\[)', x))

Ou en utilisant regex

print([y+d for y in x.split(d)])

p >


0 commentaires

0
votes

En supposant que vous souhaitiez conserver les '[' et ']', vous pouvez utiliser split () pour obtenir les éléments, mais utiliser split () supprime également la chaîne de fractionnement '], ['. Vous devez donc traiter la liste que vous devez rajouter '[' et ']'.

for temp_element in temp_elements:
    elements.append('[' + temp_element + '],')

Résultat

['ALCOHOL','BREAD','CAKES AND SWEETS','FRUIT AND VEGETABLES','MILK AND DAIRY PRODUCTS']
['BREAD','CAKES AND SWEETS','DIPS','MILK AND DAIRY PRODUCTS','PASTA']
['HOT FOOD','OTHERS']
['ALCOHOL','BREAD','CAKES AND SWEETS']
['BREAD','CAKES AND SWEETS','FRUIT AND VEGETABLES','MILK AND DAIRY PRODUCTS','OTHERS','SNACKS','SPICES','WATER']
['BREAD','CAKES AND SWEETS','FRUIT AND VEGETABLES']
['BREAD','CAKES AND SWEETS']

Voulez pour conserver le ',' utilisez

input = "['ALCOHOL','BREAD','CAKES AND SWEETS','FRUIT AND VEGETABLES','MILK AND DAIRY 
   PRODUCTS'],['BREAD','CAKES AND SWEETS','DIPS','MILK AND DAIRY PRODUCTS','PASTA'],            
   ['HOT FOOD','OTHERS'],['ALCOHOL','BREAD','CAKES AND SWEETS'],['BREAD','CAKES AND 
   SWEETS','FRUIT AND VEGETABLES','MILK AND DAIRY 
   PRODUCTS','OTHERS','SNACKS','SPICES','WATER'],['BREAD','CAKES AND SWEETS','FRUIT 
   AND VEGETABLES'],['BREAD','CAKES AND SWEETS']"

elements = []

# remove leading '[' and ending ']' otherwise ---------------
# you get '[[' and ']]' at first and last element
input = input[1:-1]

# split on '],[' and re-add '[' and ']' -------------------------
temp_elements = input.split('],[')
for temp_element in temp_elements:
    elements.append('[' + temp_element + ']')

# result -----------------------------------------------------
for element in elements:
    print(element)


0 commentaires

1
votes

Un autre moyen plus court consiste à remplacer le fractionnement ',' par un caractère ou une chaîne qui n'apparaît pas dans vos données, par exemple remplacer par ']###['.

Après le remplacement, vous pouvez fractionner sur '###':

elements = input.replace('],[', ']###[').split('###')


0 commentaires