2015-01-05 13 views
15

Próbuję dołączyć dane do pliku za pomocą funkcji savetxt numpy. Poniżej znajduje się przykład minimum pracypython3-numpy: Dołączanie do pliku przy użyciu numpy savetxt

#!/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() 

Błąd, że mam coś o rodzaju błędu

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

Ten błąd nie występuje w python2 więc zastanawiam się co może być problem . Czy ktoś może mi pomóc?

+3

Musisz otworzyć plik w trybie binarnym zamiast tekstowym: 'f = open ('asd.dat', 'ba')'. Rozważ również użycie instrukcji 'with', aby upewnić się, że uchwyt pliku zostanie poprawnie zamknięty w przypadku wystąpienia błędu. – cel

+1

Prawdopodobny duplikat: https://stackoverflow.com/questions/14437054/why-should-i-give-savetxt-a-file-opened-in-binary-rather-tan-text-mode. – nwk

+0

@cel To rozwiązało problem, dzięki – Meenakshi

Odpowiedz

19

Powinieneś otworzyć plik w trybie binarnym.

#!/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() 

referencyjny: python - Jak napisać numpy tablicy do pliku CSV? - Stack Overflow How to write a numpy array to a csv file?

+0

Szukałem długo dla tej opcji "ba". Dzięki. – dorien

+0

Opcja 'b' nie działała z np.savetxt na moim komputerze. Czy ktoś może to potwierdzić? –

+0

@HyunjunKim Mój python (python-3.5, numpy-1.13.3 na Ubuntu 16.04) działa dobrze powyżej kodu. Jeśli spróbujesz napisu, dodaj typ danych ('np.savetxt (f, [" AAA "],"% s ")') – user4352571