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?