1
votes

Comment séparer les valeurs à l'aide de Python

Comment séparer les valeurs en utilisant Python? J'ai essayé split et linespace mais ils ne divisent pas les données comme je l'attendais

Mon fichier .txt contient les éléments suivants: p >

f = open('imagenet1000_clsid_to_human.txt', 'r') 
x = f.read().lower().strip().split("',") 
y = [] 
for i in x: (y.append(i)) 
    print(y)

Je recherche une sortie key = [0,1,2,3, ...] Values ​​= ['tench, Tinca tinca ',' poisson rouge, Carassius auratus ', ...] ou est-ce que je peux simplement le convertir en dictionnaire? J'ai essayé de diviser en utilisant l'argument (',') et cela divise 'tench, mais je veux' tench, Tinca tinca 'comme sortie.

Voici le code sur lequel je suis bloqué

{0: 'tench, Tinca tinca', 
1: 'goldfish, Carassius auratus', 
2: 'great white shark, white shark, man-eater, man-eating carcharias', 3: 'tiger shark, Galeocerdo cuvieri', 
4: 'hammerhead, hammerhead shark', 
5: 'electric ray, crampfish, numbfish, torpedo',} 


0 commentaires

4 Réponses :


1
votes

Dirty hack:

txt = txt.replace("'", '"').replace(",}", "}")  
txt = re.sub("(\d+):", r'"\1":', txt)
data = json.loads(txt)

Autre sale hack:

a = re.findall("(\d+): \'(.*?)\'", txt)
keys, values = zip(*a)

Bien sûr, vous devez importer respectivement re ou json. p >


0 commentaires

3
votes

L'idée clé est de lire le texte brut comme dict.

[0, 1, 2, 3, 4, 5]
['tench, Tinca tinca', 'goldfish, Carassius auratus', 'great white shark, white shark, man-eater, man-eating carcharias', 'tiger shark, Galeocerdo cuvieri', 'hammerhead, hammerhead shark', 'electric ray, crampfish, numbfish, torpedo']

Output

import ast
with open('imagenet1000_clsid_to_human.txt', 'r') as f:
    s = f.read()
    dicts = ast.literal_eval(s)
print(list(dicts.keys()))
print(list(dicts.values()))


0 commentaires

1
votes

Si vous voulez passer de la représentation str du fichier texte à dict, utilisez:

keys = []
values = []
for key,val in str_to_dict.items():
   keys.append(key)
   values.append(val)

Une fois que vous avez un dict, si je comprends bien, vous voulez 1 liste de toutes les clés et une autre liste contenant toutes les valeurs. Pour cela, vous pouvez faire ceci:

str_to_dict = ast.literal_eval(x)


0 commentaires

1
votes

En supposant que vous pouvez stocker le contenu du fichier dans un str :

text = "0: 'tench, Tinca tinca', 1: 'goldfish, Carassius auratus', 2: 'great white shark, white shark, man-eater, man-eating carcharias', 3: 'tiger shark, Galeocerdo cuvieri', 4: 'hammerhead, hammerhead shark', 5: 'electric ray, crampfish, numbfish, torpedo',"

text_list = list(filter(lambda x: len(x) > 0, text.split("',")))
keys = list(map(lambda x: x.split(":")[0], text_list))
values = list(map(lambda x: x.split(":")[1][2:], text_list))
my_dict = dict(zip(keys,values))

Ce n'est pas la solution la plus élégante, mais fonctionne si vous ne voulez pas utiliser d'autres paquets comme ast. Cependant, je vous recommande d'utiliser les packages ast comme décrit dans les réponses fournies par d'autres utilisateurs car ils peuvent gérer différents formats / espacements afin que vous n'ayez pas à vous en soucier.


0 commentaires