Есть два способа, которые сработали для меня, вы можете использовать оба из них, однако я бы порекомендовал второй, поскольку первый использует eval()
и его использование рискованно в случаях ввода пользователем. Если вы не используете строку ввода, указанную пользователем, вы также можете использовать метод 1.
1) USING eval()
import pyarrow as pa
column_types={}
column_types['A'] = 'pa.'+'string'+'()'
column_types['B'] = 'pa.'+'int32'+'()'
final_col_types={key:eval(val) for key,val in column_types.items()} # calling eval() to parse each string as a function and creating a new dict containing 'col':function()
from pyarrow import csv
table = csv.read_csv(filename,convert_options=csv.ConvertOptions(column_types=final_col_types))
print(table)
2) Создав главный словарь dict_dtypes
, содержащий имя вызываемой функции для конкретной строки. И далее, используя dict_dtypes
, чтобы сопоставить строку с соответствующей функцией.
import pyarrow as pa
column_types={}
column_types['A'] = 'pa.'+'string'+'()'
column_types['B'] = 'pa.'+'int32'+'()'
dict_dtypes={'pa.string()':pa.string(),'pa.int32()':pa.int32()} # master dict containing callable function for a string
final_col_types={key:dict_dtypes[val] for key,val in column_types.items() } # final column_types dictionary created after mapping master dict and the column_types dict
from pyarrow import csv
table = csv.read_csv(filename,convert_options=csv.ConvertOptions(column_types=final_col_types))
print(table)