在nthon中将numpy,list或float转换为字符串

时间:2014-07-23 15:29:47

标签: python numpy

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

问题是变量var,可能是1D numpy数组,1D列表,或只是浮点数,我知道如何转换numpy.array / list / { {1}}单独字符串(意思是给定类型),但有没有一种方法将float转换为字符串而不知道它的类型?

var

编辑1:感谢您的评论,抱歉也许我的问题不够明确。 关于numpy的def append_txt(filename, var): my_str = _____ # convert var to string with open(filename,'a') as f: f.write(my_str + '\n') 会给出类似str(var)的内容。例如,[]将提供var = np.ones((1,3)), str(var),而[[1. 1. 1.]]则不需要,

编辑2:因为我想写干净的数字(意思是没有[][),所以类型检查似乎是不可避免的。

4 个答案:

答案 0 :(得分:2)

类型检查不是做你想做的事情的唯一选择,但绝对是最简单的选择之一:

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给我这个想法),就是将所有内容转换为相同的类型({ {1}})然后将其转换为字符串:

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]

答案 1 :(得分:0)

如果您不知道var的类型,可以使用

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

答案 2 :(得分:0)

也许您正在寻找的是repr()

它与eval函数相反。

以下是eval的作用:

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

以下是repr的作用:

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

答案 3 :(得分:0)

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'