2015-01-05 15 views
15

Tôi đang cố nối dữ liệu vào một tệp bằng hàm savetxt của numpy. Dưới đây là ví dụ làm việc tối thiểupython3-numpy: Gắn thêm vào một tệp bằng cách sử dụng một số tập tin đính kèm

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

Các lỗi mà tôi nhận được một cái gì đó về loại lỗi

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

lỗi này không xảy ra trong python2 vì vậy tôi tự hỏi những gì vấn đề này có thể là . Ai có thể giúp tôi không?

+3

Bạn phải mở tệp của mình dưới dạng nhị phân thay vì chế độ văn bản: 'f = open ('asd.dat', 'ba')'. Ngoài ra, hãy xem xét sử dụng câu lệnh 'with' để đảm bảo rằng việc xử lý tệp của bạn được đóng đúng cách trong trường hợp xảy ra lỗi. – cel

+1

Có thể trùng lặp: https://stackoverflow.com/questions/14437054/why-should-i-give-savetxt-a-file-opened-in-binary-rather-than-text-mode. – nwk

+0

@cel Điều đó giải quyết được vấn đề, cảm ơn – Meenakshi

Trả lời

19

Bạn nên mở tệp theo chế độ nhị phân.

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

tham chiếu: python - Cách viết mảng tối đa vào tệp csv? - Stack Overflow How to write a numpy array to a csv file?

+0

Đã tìm kiếm một thời gian dài cho tùy chọn 'ba' này. Cảm ơn. – dorien

+0

tùy chọn 'b' không hoạt động với np.savetxt trên máy của tôi. Bất cứ ai có thể xác nhận nó? –

+0

@HyunjunKim Con trăn của tôi (python-3.5, numpy-1.13.3 trên Ubuntu 16.04) hoạt động tốt hơn mã. Nếu bạn thử chuỗi, nối thêm kiểu dữ liệu ('np.savetxt (f, [" AAA "],"% s ")') – user4352571

Các vấn đề liên quan