Условно преобразовать строку в int - PullRequest
0 голосов
/ 28 мая 2019

В строке data=[int(x) if x else None for x in line.replace("\n","").split(",")] ниже я бы хотел сохранить строковые значения как строковые, а не выдавать исключение, если встречается значение, которое не может быть преобразовано в int. Есть ли изящные способы сделать это? Например, если у вас есть в данной строке 9327,Garlic Powder,104,13, тогда данные будут [9327, "Garlic Powder", 104, 13]

Rik

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 ]

3 голосов
/ 28 мая 2019

Вы можете сохранить свой oneliner, используя isnumeric:

data=[int(x) if x and x.isnumeric() else x for x in line.replace("\n","").split(",")]
3 голосов
/ 28 мая 2019

Попробуйте,

>>> 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'>]
1 голос
/ 28 мая 2019

Вы можете определить функцию, которая проверяет, может ли строка быть проанализирована с целым числом.Если это возможно, вернуть целое число, иначе вернуть строку

def parse(s):

    #If string can be parsed as integer, return integer
    try:
        num = int(s)
        return num
    except:
        pass
    #Else return string
    return s

line = '9327,Garlic Powder,104,13'
data=[parse(x) for x in line.replace("\n","").split(",")]

print(data)

Вывод будет

[9327, 'Garlic Powder', 104, 13]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...