dans la ligne RIK P> data = [int (x) si x autre personne pour x en ligne.replace ("\ n", ""). Split (",")] code> ci-dessous i ' D Aimez garder les valeurs de chaîne en tant que chaîne au lieu de jeter une exception si une valeur qui ne peut pas être coulée sur INT est rencontrée. Y a-t-il des façons élégantes de faire cela? Par exemple, si vous avez sur une ligne donnée
9327, la poudre d'ail, 104,13 code> puis les données seraient
[9327, "poudre d'ail", 104, 13] code>
file = open(file_path, 'r')
# get headers
try:
header=next(file).replace("\n","").split(",")
except:
raise Exception("The file {} is empty.".format(file.file_path))
count = 0 # to count number of rows
# loop through file and process data
for line in file:
try:
data=[int(x) if x else None for x in line.replace("\n","").split(",")]
except:
raise Exception("The file {} contains invalid data.".format(file.file_path))
count += 1
for f in callback_array:
f(header,data)
3 Réponses :
Vous pouvez définir une fonction qui vérifie si une chaîne peut être analysée vers un entier. Si cela peut, renvoyez l'entier d'autre retourner la chaîne la sortie sera p>
Vous pouvez conserver votre ONEliner en utilisant iSnumeric code>:
Cela ne fonctionnera pas pour les chaînes contenant des entiers négatifs E.g -1 code>
Oui, je suis simplement basé sur ses données d'échantillonnage. Si des nombres négatifs sont également inclus, devriez plutôt choisir une fonction comme la vôtre.
Essayez ceci,
>>> def type_convert(var): if var.isnumeric(): return int(var) elif isinstance(var, str): return var else: return None >>> [type_convert(i) for i in a] [9327, 'Garlic Powder', 104, 13] >>> new = [type_check(i) for i in a] >>> [type(n) for n in new] [<class 'int'>, <class 'str'>, <class 'int'>, <class 'int'>]
Est-ce que cette amende si nous essayons de le jeter à un int, et basé sur le résultat, retourner à la chaîne ou entier @rik?