从文件读取并将 np 数组保存到同一文件后丢失值
Losing values after reading from file and saving np array to the same file
我有一个读取和写入文件的函数,但在每个 运行 和写入周期之后,我总是丢失部分字符串和部分浮点数。
函数如下所示,输出保存在文件中:
def stringlist(self,name,price):
b = price
hh = []
if name in self.x :
c = self.x.index(name)
d = (self.x[c], b)
self.z.append(d)
else:
self.x.append(name)
c = self.x.index(name)
d = (self.x[c], b)
self.z.append(d)
g = np.asarray(self.z)
m = np.loadtxt("D:\Python\inlint4.txt", delimiter=",", fmt ="%s")
n = np.append(m,g)
np.savetxt("D:\Python\inlint4.txt" , n, delimiter=', ', fmt="%s")
return n
并且每个周期输出保存两行如下:
RPOWE
54.5
RPOWE
57.34
RPOWE
57.75
RPOWER-EQ
57.9000015259
如您所见,只有最后一行是完整打印的,其他所有都已折旧。
还有什么方法可以让我打印成这样:
RPOWER-EQ , 57.9000015259
RPOWER-EQ , 57.9000015259
当我尝试复制你的代码时
m = np.loadtxt("D:\Python\inlint4.txt", delimiter=",", fmt ="%s")
给我一个错误
TypeError: loadtxt() got an unexpected keyword argument 'fmt'
您的 g
数组(和 m
)看起来像是字符串和数字的混合体。所以它将是 dtype string 或 object
In [410]: z=np.asarray(['RPOWE',54.50124])
In [411]: z
Out[411]:
array(['RPOWE', '54.50124'],
dtype='|S8')
In [412]: z=np.asarray(['RPOWE',54.50124],dtype=object)
In [413]: z
Out[413]: array(['RPOWE', 54.50124], dtype=object)
我怀疑浮点有效数字的丢失与此转换 to/from 字符串有关。也许你可以打印 g
和 m
来查看它们的数据类型和内容。
我可以在 'fmt' 中包含你的话,因此:
In [419]: np.savetxt('temp',np.array([1.23,1324.243]),delimiter=',',fmt="%s, %%s"%'RPOWE')
In [420]: cat temp
RPOWE, 1.23
RPOWE, 1324.243
但是loadtxt
不喜欢加载这个;我必须指定一个自定义转换器。
genfromtxt
处理这个没问题
In [423]: np.genfromtxt('temp',delimiter=',',dtype=None)
Out[423]:
array([('RPOWE', 1.23), ('RPOWE', 1324.243)],
dtype=[('f0', 'S5'), ('f1', '<f8')])
您可以完全跳过数组,直接使用列表和文件写入,例如:
In [438]: alist=[('ROWAN',123.35234), ('RWRSR',343.23424), ('Testin',1.234)]
In [439]: for pair in alist:
with open('temp','a') as f:
f.write('%s, %f\n'%pair)
.....:
In [440]: cat temp
ROWAN, 123.352340
RWRSR, 343.234240
Testin, 1.234000
In [442]: np.genfromtxt('temp',dtype=None,delimiter=',')
Out[442]:
array([('ROWAN', 123.35234), ('RWRSR', 343.23424), ('Testin', 1.234)],
dtype=[('f0', 'S6'), ('f1', '<f8')])
我有一个读取和写入文件的函数,但在每个 运行 和写入周期之后,我总是丢失部分字符串和部分浮点数。
函数如下所示,输出保存在文件中:
def stringlist(self,name,price):
b = price
hh = []
if name in self.x :
c = self.x.index(name)
d = (self.x[c], b)
self.z.append(d)
else:
self.x.append(name)
c = self.x.index(name)
d = (self.x[c], b)
self.z.append(d)
g = np.asarray(self.z)
m = np.loadtxt("D:\Python\inlint4.txt", delimiter=",", fmt ="%s")
n = np.append(m,g)
np.savetxt("D:\Python\inlint4.txt" , n, delimiter=', ', fmt="%s")
return n
并且每个周期输出保存两行如下:
RPOWE
54.5
RPOWE
57.34
RPOWE
57.75
RPOWER-EQ
57.9000015259
如您所见,只有最后一行是完整打印的,其他所有都已折旧。
还有什么方法可以让我打印成这样:
RPOWER-EQ , 57.9000015259
RPOWER-EQ , 57.9000015259
当我尝试复制你的代码时
m = np.loadtxt("D:\Python\inlint4.txt", delimiter=",", fmt ="%s")
给我一个错误
TypeError: loadtxt() got an unexpected keyword argument 'fmt'
您的 g
数组(和 m
)看起来像是字符串和数字的混合体。所以它将是 dtype string 或 object
In [410]: z=np.asarray(['RPOWE',54.50124])
In [411]: z
Out[411]:
array(['RPOWE', '54.50124'],
dtype='|S8')
In [412]: z=np.asarray(['RPOWE',54.50124],dtype=object)
In [413]: z
Out[413]: array(['RPOWE', 54.50124], dtype=object)
我怀疑浮点有效数字的丢失与此转换 to/from 字符串有关。也许你可以打印 g
和 m
来查看它们的数据类型和内容。
我可以在 'fmt' 中包含你的话,因此:
In [419]: np.savetxt('temp',np.array([1.23,1324.243]),delimiter=',',fmt="%s, %%s"%'RPOWE')
In [420]: cat temp
RPOWE, 1.23
RPOWE, 1324.243
但是loadtxt
不喜欢加载这个;我必须指定一个自定义转换器。
genfromtxt
处理这个没问题
In [423]: np.genfromtxt('temp',delimiter=',',dtype=None)
Out[423]:
array([('RPOWE', 1.23), ('RPOWE', 1324.243)],
dtype=[('f0', 'S5'), ('f1', '<f8')])
您可以完全跳过数组,直接使用列表和文件写入,例如:
In [438]: alist=[('ROWAN',123.35234), ('RWRSR',343.23424), ('Testin',1.234)]
In [439]: for pair in alist:
with open('temp','a') as f:
f.write('%s, %f\n'%pair)
.....:
In [440]: cat temp
ROWAN, 123.352340
RWRSR, 343.234240
Testin, 1.234000
In [442]: np.genfromtxt('temp',dtype=None,delimiter=',')
Out[442]:
array([('ROWAN', 123.35234), ('RWRSR', 343.23424), ('Testin', 1.234)],
dtype=[('f0', 'S6'), ('f1', '<f8')])