2015-01-05 23 views
15

Numpy'nin savetxt işlevini kullanarak bir dosyaya veri eklemeye çalışıyorum. Aşağıda minimum çalışma örneğidirpython3-numpy: Bir dosyaya numpy savetxt kullanarak ekleme

#!/usr/bin/env python3 
import numpy as np 
f=open('asd.dat','a') 
for iind in range(4): 
    a=np.random.rand(10,10) 
    np.savetxt(f,a) 
f.close() 

aldığım hata yüzden sorun olabilir merak ediyorum bu hata python2 oluşmaz

File "/usr/lib/python3/dist-packages/numpy/lib/npyio.py", line 1073, in savetxt fh.write(asbytes(format % tuple(row) + newline)) TypeError: must be str, not bytes

hata türü hakkında bir şeydir . Bana yardım eden var mı?

+3

Dosyanızı metin modu yerine ikili olarak açmanız gerekir: 'f = open ('asd.dat', 'ba')'. Ayrıca, bir hata oluşması durumunda dosya tanıtıcınızın düzgün bir şekilde kapatıldığından emin olmak için 'with' ifadesini kullanmayı da düşünebilirsiniz. – cel

+1

Olası kopya: https://stackoverflow.com/questions/14437054/why-should-i-give-savetxt-a-file-opened-in-binary-rather-than-text-mode. – nwk

+0

@cel Bu sorunu çözdü, teşekkürler – Meenakshi

cevap

19

Dosyayı ikili modda açmanız gerekir.

#!/usr/bin/env python3 
import numpy as np   
f=open('asd.dat','ab') 
for iind in range(4): 
    a=np.random.rand(10,10) 
    np.savetxt(f,a) 
f.close() 

referans: piton - Nasıl bir csv dosyasına numpy dizi yazmak için? - Yığın Akımı How to write a numpy array to a csv file?

+0

Bu 'ba' seçeneği için uzun zamandır baktım. Teşekkürler. – dorien

+0

'b' seçeneği, makinemde np.savetxt ile çalışmadı. Bunu onaylayan var mı? –

+0

@HyunjunKim Benim python'um (python-3.5, Ubuntu 16.04'teki numpy-1.13.3) kodun üstünde çalışır. Dizgeyi denerseniz, veri tipi ekleyin ('np.savetxt (f, [" AAA "],"% s ")') – user4352571

İlgili konular