2014-09-12 10 views
5

Sto facendo alcuni calcoli dopo aver letto un file, e voglio memorizzare il risultato (un singolo numero) in un altro file. Voglio essere in grado di fare cose con questo file in seguito. Sto riscontrando problemi con la memorizzazione del risultato nel file di testo.Come scrivere il risultato di un calcolo in un file in python?

ho provato questo:

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

che mi dà questo errore per la linea f.write(d):

Non-character array cannot be interpreted as character buffer

Ho anche provato ad utilizzare np.savetxt('test.dat',d) ma che mi dà:

IndexError: tuple index out of range

Qualsiasi idea come posso risolvere questo? Notare che d è solo un singolo valore, che è la somma di alcuni numeri.

+0

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

+1

f.write (str (d)) – chris

risposta

3

Per scrivere in un file, python richiede stringhe o byte, non numeri. Prova:

f.write('%s' % d) 

o

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

D'altra parte, se si vuole scrivere una matrice NumPy in un file e poi leggerlo di nuovo in come un array NumPy, utilizzare il modulo pickle .

1

Provare a convertire una stringa prima di scriverla.

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

notare inoltre l'uso del with contesto Manager, che è buona norma utilizzare sempre durante l'apertura dei file.

1

write prevede una matrice di byte codificata.

Se si sta ancora codificando Python 2, è possibile utilizzare f.write('{:d}\n'.format(d)).

In Python 3, è possibile utilizzare il dispositivo di pulizia print(d, file=f).

0

non posso dire esattamente se il resto del codice è corretto o no, ma ho notato che non si specifica il tipo di file nel codice:

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

Se si tratta di un file .txt si sta andando perché dovrebbe leggere:

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

Dato che si sta lavorando con Numpy, suggerisco di dare un'occhiata a Panda. Questo pacchetto ha una gamma di funzioni/metodi di input/output associati al suo DataFrame (array 2D), come ad esempio to_csv. È possibile leggere e scrivere facilmente le informazioni di intestazione con queste funzioni e si occuperà della conversione da numero a stringa e viceversa.

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)