Преобразование numpy, list или float в строку в python

Вопрос:

Я пишу функцию python для добавления данных в текстовый файл, как показано ниже,

Проблема в том, что переменная, var, может быть массивом 1D numpy, 1D-списком или просто числом с плавающей запятой, я знаю, как преобразовать numpy.array/list/float в строку отдельно (то есть с учетом типа), но есть ли метод преобразования var в строку без знания его типа?

def append_txt(filename, var):
my_str = _____    # convert var to string
with open(filename,'a') as f:
f.write(my_str + '\n')

Редактировать 1: Спасибо за комментарии, извините, может быть, мой вопрос был недостаточно ясен. str(var) на numpy даст что-то вроде []. Например, var = np.ones((1,3)), str(var) даст [[1. 1. 1.]] [[1. 1. 1.]] и [] нежелательно,

Изменить 2: Поскольку я хочу написать чистые номера (то есть не [ или ]), кажется, типа проверка неизбежна.

Ответ №1

Проверка типов – это не единственная возможность делать то, что вы хотите, но определенно один из самых простых:

import numpy as np

def to_str(var):
if type(var) is list:
return str(var)[1:-1] # list
if type(var) is np.ndarray:
try:
return str(list(var[0]))[1:-1] # numpy 1D array
except TypeError:
return str(list(var))[1:-1] # numpy sequence
return str(var) # everything else

EDIT: Еще один простой способ, который не использует проверку типов (спасибо jtaylor за то, что дал мне эту идею), состоит в том, чтобы преобразовать все в один и тот же тип (np.array), а затем преобразовать его в строку:

import numpy as np

def to_str(var):
return str(list(np.reshape(np.asarray(var), (1, np.size(var)))[0]))[1:-1]

Пример использования (оба метода дают одинаковые результаты):

>>> to_str(1.) #float
'1.0'
>>> to_str([1., 1., 1.]) #list
'1.0, 1.0, 1.0'
>>> to_str(np.ones((1,3))) #np.array
'1.0, 1.0, 1.0'

Ответ №2

Если вы не знаете, что такое тип var, вы можете проверить тип, используя

from collections import Iterable
if isinstance(var,Iteratable):
mystring=''.join(map(str,var))
else:
mystring=str(var)

Ответ №3

Возможно, что вы ищете, это repr()

Это противоположность функции eval.

Вот что делает eval:

eval('[1,3]')
# [1, 3]

Вот то, что repr делает:

repr('example')
# "'example'"
repr(0.1)
# '0.1'
repr([1,2])
# '[1,2]'

Ответ №4

str может преобразовать любой тип в строку. Это может быть numpy.array/list/float

# using numpy array
new_array = numpy.array([1,2,3])
str(new_array)
>> '[1 2 3]'

# using list
new_list = [1, 2, 3]
str(new_list)
>> '[1, 2, 3]'

# using float
new_float = 1.1
str(new_float)
>> '1.1'

Оцените статью
TechArks.Ru
Добавить комментарий