在python中将numpy、list或float转换为字符串
我正在编写一个python函数将数据附加到文本文件中,如下所示 问题是变量,在python中将numpy、list或float转换为字符串,python,numpy,Python,Numpy,我正在编写一个python函数将数据附加到文本文件中,如下所示 问题是变量,var,可能是1D numpy数组、1D列表,或者只是一个浮点数,我知道如何将numpy.array/list/分别转换为字符串(意思是给定类型),但是有没有一种方法可以在不知道其类型的情况下将var转换为字符串 def append_txt(filename, var): my_str = _____ # convert var to string with open(filename,'a')
var
,可能是1D numpy数组、1D列表,或者只是一个浮点数,我知道如何将numpy.array
/list
/分别转换为字符串(意思是给定类型),但是有没有一种方法可以在不知道其类型的情况下将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:因为我想写干净的数字(意思是没有[
或]
),所以类型检查似乎是不可避免的。如果您不知道var的类型,可以使用
from collections import Iterable
if isinstance(var,Iteratable):
mystring=''.join(map(str,var))
else:
mystring=str(var)
也许你要找的是
它与函数相反
以下是eval
的功能:
eval('[1,3]')
# [1, 3]
以下是repr
的功能:
repr('example')
# "'example'"
repr(0.1)
# '0.1'
repr([1,2])
# '[1,2]'
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'
类型检查不是您想要做的唯一选项,但绝对是最简单的选项之一:
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]
示例使用(两种方法得出的结果相同):
这可能有助于str(var)
?这会起作用,顺便说一句,有一个输入错误:如果isinstance(var,Iterable):str(numpy数组)不会打印完整的数组如果它很大,你必须更改打印选项,转换为list或使用savetxt以文本形式获取所有数据当它是一些编码怪异的字符串时,str()可能会引发一些奇怪的错误。您能列出字符串和引发的错误吗?我在考虑unicode字符串,str(u“\u03A9”)会引发unicodeEncodeError unicodeEncodeError unicodeEncodeError在Python3中不会发生。如果您使用的是Python 2,那么可以使用str(var).encode('utf-8')很高兴知道这是可能的。但是,repr(np.ones((1,3))
将给出'array([[1,1,1.]])
。好主意!np.savetxt还可以用于以可读的方式保存numpy数组,array.tolist()为you@jtaylor这主意不错。但是,要使其工作,您必须将所有类型转换为np.array
。完成后,您还可以自己将其转换为字符串。我对我的答案进行了编辑,以纳入该方法。
>>> 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'