Rafat
Rafat

Reputation: 137

How to write the result of a calculation to a file in python?

I'm doing some calculations after reading a file, and want to store the result (a single number) to another file. I want to be able to do things with this file later. I'm having problems storing the result into the text file.

I tried this:

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

which gives me this error for the line f.write(d):

Non-character array cannot be interpreted as character buffer

I also tried using np.savetxt('test.dat',d) but that gives me:

IndexError: tuple index out of range

Any idea how can I solve this? Note that d is just a single value, which is the sum of a few numbers.

Upvotes: 5

Views: 12550

Answers (5)

Finn Årup Nielsen
Finn Årup Nielsen

Reputation: 6726

Given you are working with Numpy may I suggest you take a look at Pandas. That package has a range of input/output functions/methods associated with its DataFrame (2D array), such as to_csv. You may easily read and write header information with these function and it will take care of the conversion from number to string and back again.

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)

Upvotes: 1

VisionExcelerated
VisionExcelerated

Reputation: 1

I cannot say exactly if the rest of the code is correct or not but I have noticed that you don't specify the file type in the code:

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

If it's a .txt you are going for it should read:

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

Upvotes: 0

5gon12eder
5gon12eder

Reputation: 25429

write expects an encoded byte array.

If you are still coding Python 2, you might use f.write('{:d}\n'.format(d)).

In Python 3, you can use the cleaner print(d, file=f) instead.

Upvotes: 1

Roger Fan
Roger Fan

Reputation: 5045

Try converting d to a string before writing it.

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

Also note the use of the with context manager, which is good practice to always use when opening files.

Upvotes: 1

John1024
John1024

Reputation: 113884

To write to a file, python wants strings or bytes, not numbers. Try:

f.write('%s' % d)

or

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

On the other hand, if you want to write a numpy array to a file and later read it back in as a numpy array, use the pickle module.

Upvotes: 3

Related Questions