我正在编写一个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:因为我想写干净的数字(意思是没有[]
或[
),所以类型检查似乎是不可避免的。
答案 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'