Python 读取文件并将np数组保存到同一文件后丢失值

Python 读取文件并将np数组保存到同一文件后丢失值,python,numpy,save,Python,Numpy,Save,我有一个函数,可以读取和写入文件,但在每次运行和写入循环之后,我都会丢失部分字符串和部分浮点 下面给出了函数及其保存在文件中的输出: 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:

我有一个函数,可以读取和写入文件,但在每次运行和写入循环之后,我都会丢失部分字符串和部分浮点

下面给出了函数及其保存在文件中的输出:

 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
)是字符串和数字的混合体。因此,它将是数据类型字符串或对象

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)
我怀疑浮点有效数字的丢失与字符串之间的转换有关。也许你可以打印
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
处理此ok

In [423]: np.genfromtxt('temp',delimiter=',',dtype=None)
Out[423]: 
array([('RPOWE', 1.23), ('RPOWE', 1324.243)], 
      dtype=[('f0', 'S5'), ('f1', '<f8')])
[423]中的
:np.genfromtxt('temp',delimiter=','dtype=None)
Out[423]:
数组([('RPOWE',1.23),('RPOWE',1324.243)],

dtype=[('f0','S5'),('f1',“请将您的程序缩减为演示错误的尽可能短的完整程序。有关更多信息,请参阅。您是否尝试过其他
fmt
参数(除了
%s
)是的,我尝试了一系列fmt参数,比如:%1.7s、%1.7c、%1.8f@hpaulj
savetxt
没有任何特殊功能。它只是逐行格式化数据,然后写入。看看它的代码。我打赌你也可以同样轻松地编写自己的文件写入程序。你能打印
D:\Python\inlint4.txt
内容的示例吗?
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')])