在Python中将numpy、列表或浮点数转换为字符串
我正在写一个Python函数,用来把数据追加到文本文件中,下面是我的代码。
问题是,变量 var
可能是一个一维的numpy数组、一维的列表,或者只是一个浮点数。我知道怎么把 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:感谢大家的评论,抱歉我可能没有把问题说清楚。对numpy使用 str(var)
会得到像 []
这样的结果。例如,var = np.ones((1,3)),str(var)
会得到 [[1. 1. 1.]]
,而 []
是我不想要的结果。
编辑2:因为我想写干净的数字(也就是说没有 [
或 ]
),所以似乎类型检查是不可避免的。
4 个回答
1
如果你不知道变量的类型,可以使用下面的代码来检查它的类型:
from collections import Iterable
if isinstance(var,Iteratable):
mystring=''.join(map(str,var))
else:
mystring=str(var)
4
str
可以把任何类型的数据转换成字符串。比如说,它可以把 numpy.array、列表或者浮点数都变成字符串。
# 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'
6
类型检查并不是实现你想要的功能的唯一方法,但绝对是最简单的方法之一:
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
编辑:还有一种简单的方法,不使用类型检查(感谢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'