在python中将numpy、list或float转换为字符串

在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')

我正在编写一个python函数将数据附加到文本文件中,如下所示

问题是变量,
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'