В настоящее время я могу создать список функций преобразования, например:
casts = [float, float, int, str, int, str, str]
но я хотел бы сделать это следующим образом:
casts = input("Enter the casts: ") # this would be str str int int float
Я попробовал просто сделать cast.split()
но это выводит только список строк, а не функции преобразования.
Как я буду идти к достижению своей цели?
Когда я открываю файл, содержащий строки и столбцы, я использую типы для преобразования столбцов, чтобы мне не приходилось конвертировать столбцы вручную.
используйте словарь поиска со значениями типа «float»: float
Функция — это не имя. Благословенный способ — использовать словарь для сопоставления имен функциям:
casts = {'int': int, 'float': float, 'str': str}
cast = casts[input('Enter the cast name')]
Антишаблон позволяет искать имена в модуле:
import builtins
cast = getattr(builtins, input('Enter the cast name)]
Но будьте осторожны: хотя это разрешено языком, это нарушает разделение между пользовательским кодом и внутренними компонентами языка. Вам следует избегать этого, если можете...
Судя по вашим комментариям, вы ищете что-то близкое к:
cast_ref = {'int': int, 'float': float, 'str': str}
casts = [cast_ref[src] for src in input('Enter the casts: ').split()]
Иногда файлы, для которых я использую это, имеют разное количество столбцов, поэтому вместо жесткого кодирования столбцов я хочу иметь возможность создавать преобразования по мере необходимости.
Этот метод, похоже, не позволяет мне вводить более одного ключа вместо списка ключей.
@capnhud В этом случае отредактируйте свой вопрос, чтобы уточнить, как вы хотите вводить клавиши.
@capnhud здесь более чем достаточно информации, которая поможет тебе справиться с этим делом, приходи сейчас
@juanpa.arrivillaga Должно быть, я это упускаю, потому что все, что я получаю, это KeyErrors
@capnhud У вас есть два вопроса: «Как преобразовать "int"
в int()
» и «как разделить строку пробелами»? Первое — это суть поста, и этот ответ хорошо его описывает. На второе отвечает этот пост. Совмещения этих двух должно быть достаточно.
вы можете использовать функцию eval
print(type(eval('int(2)')))
## int
cast = eval(input("Enter the cast: "))
Предыдущие комментарии указывают на то, что это небезопасно.
Если вы заранее не знаете типы данных, вы можете использовать встроенные механизмы вывода типов данных pandas для автоматического определения типов данных каждого столбца.
import pandas as pd
# Read the data file into a pandas DataFrame
df = pd.read_csv('data.csv')
# Infer data types for each column
df = df.infer_objects()
# Print the resulting DataFrame
print(df)
casts = [float, float, int, str, int, str, str]
def tonumtype(item,num)
tonumb = f"""
{item}({num}) """
return eval(tonumb)
tonumtype(casts[1],10) = float(10)
eval
действительно следует избегать, когда это возможно. Кроме того, это вызовет SyntaxError.
Каков фактический вариант использования? Похоже, это проблема XY.