在Python中将numpy、列表或浮点数转换为字符串

7 投票
4 回答
67073 浏览
提问于 2025-04-18 14:27

我正在写一个Python函数,用来把数据追加到文本文件中,下面是我的代码。

问题是,变量 var 可能是一个一维的numpy数组、一维的列表,或者只是一个浮点数。我知道怎么把 numpy.arraylistfloat 分别转换成字符串(也就是说,知道它的类型),但是有没有办法在不知道类型的情况下,把 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

也许你想要的就是 repr() 这个东西。

它的功能正好和 eval 函数相反。

下面是 eval 的作用:

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

下面是 repr 的作用:

repr('example')
# "'example'"
repr(0.1)
# '0.1'
repr([1,2])
# '[1,2]'
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'

撰写回答