Pytanie python3-numpy: Dołączanie do pliku przy użyciu numpy savetxt


Próbuję dołączyć dane do pliku przy użyciu funkcji savetxt numpy. Poniżej znajduje się minimalny przykład roboczy

#!/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, który otrzymałem, jest związany z rodzajem błędu

Plik "/usr/lib/python3/dist-packages/numpy/lib/npyio.py", wiersz 1073,   w 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ę, jaki może być problem. Czy ktoś może mi pomóc?


18
2018-01-05 19:55


pochodzenie


Musisz otworzyć swój plik w trybie binarnym zamiast w trybie tekstowym: f=open('asd.dat','ba'). Rozważ także użycie with oświadczenie, aby upewnić się, że uchwyt pliku zostanie poprawnie zamknięty w przypadku wystąpienia błędu. - cel
Możliwy duplikat: stackoverflow.com/questions/14437054/.... - nwk
@cel To rozwiązało problem, dzięki - Meenakshi


Odpowiedzi:


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()

odniesienie: python - Jak napisać tablicę numpy do pliku csv? - Przepełnienie stosu Jak napisać tablicę numpy do pliku csv?


24
2018-01-16 09:23



Długo szukałem tej opcji "ba". Dzięki. - dorien
Opcja 'b' nie działała z np.savetxt na moim komputerze. Czy ktoś może to potwierdzić? - Hyunjun Kim
@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
@ user4352571 Myślałem, że opcja "b" służy do zapisywania danych w nieczytelnym formacie przez człowieka. Ale powyższy kod nie działa bez opcji "b". Przepraszam za to że nie zrozumiałem. - Hyunjun Kim