2014-09-12 31 views
5

Tôi đang thực hiện một số tính toán sau khi đọc một tệp và muốn lưu kết quả (một số) vào một tệp khác. Tôi muốn có thể làm những việc với tệp này sau. Tôi đang gặp sự cố khi lưu kết quả vào tệp văn bản.Làm thế nào để viết kết quả tính toán vào một tệp trong python?

Tôi cố gắng này:

c = fdata_arry[:,2]*fdata_arry[:,4] 
    d = np.sum(c) 
    print d 
    f = open('test','w') 
    f.write(d) 
    f.close() 

mà mang lại cho tôi lỗi này cho các dòng f.write(d):

Non-character array cannot be interpreted as character buffer

Tôi cũng đã cố gắng sử dụng np.savetxt('test.dat',d) nhưng điều đó mang lại cho tôi:

IndexError: tuple index out of range

Bất kỳ ý tưởng làm thế nào tôi có thể giải quyết điều này? Lưu ý rằng d chỉ là một giá trị duy nhất, là tổng của một vài số.

+0

thử http://stackoverflow.com/questions/13255758/numpy-savetxt-tuple-index-out-of-range – user2085282

+1

f.write (str (d)) – chris

Trả lời

3

Để ghi vào một tệp, python muốn chuỗi hoặc byte, không phải số. Hãy thử:

f.write('%s' % d) 

hoặc

f.write('{}'.format(d)) 

Mặt khác, nếu bạn muốn viết một mảng NumPy vào một tập tin và sau đó đọc nó trở lại trong như một mảng NumPy, sử dụng các mô-đun dưa .

1

Thử chuyển d thành chuỗi trước khi viết.

with open('test.txt', 'w') as f: 
    f.write(str(d)) 

Cũng lưu ý việc sử dụng trình quản lý ngữ cảnh with là phương pháp hay để luôn sử dụng khi mở tệp.

1

write hy vọng mảng byte được mã hóa.

Nếu bạn vẫn đang mã hóa Python 2, bạn có thể sử dụng f.write('{:d}\n'.format(d)).

Trong Python 3, bạn có thể sử dụng trình dọn dẹp print(d, file=f) để thay thế.

0

Tôi không thể nói chính xác nếu phần còn lại của mã này là đúng hay không nhưng tôi đã nhận thấy rằng bạn không chỉ định các loại tập tin trong các mã:

f = open('test','w') 

Nếu đó là một .txt bạn đang đi cho nó nên đọc:

f = open('test.txt','w') 
1

Vì bạn đang làm việc với Numpy, tôi có thể đề nghị bạn hãy xem Pandas. Gói đó có một loạt các hàm/phương thức đầu vào/đầu ra được kết hợp với DataFrame (mảng 2D) của nó, chẳng hạn như to_csv. Bạn có thể dễ dàng đọc và viết thông tin tiêu đề với các chức năng này và nó sẽ chăm sóc chuyển đổi từ số thành chuỗi và ngược lại.

import pandas as pd 

pd.DataFrame([d], columns=['Sum']).to_csv(open('test.dat', 'w')) 
data_read_again = pd.read_csv('test.dat', index_col=0) 
Các vấn đề liên quan