2014-09-12 2 views
5

Ich mache einige Berechnungen nach dem Lesen einer Datei und möchte das Ergebnis (eine einzelne Zahl) in einer anderen Datei speichern. Ich möchte später mit dieser Datei etwas machen können. Ich habe Probleme beim Speichern des Ergebnisses in der Textdatei.Wie schreibe ich das Ergebnis einer Berechnung in eine Datei in Python?

Ich versuchte dies:

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

, die mir diesen Fehler für die Linie f.write(d) gibt: auch np.savetxt('test.dat',d)

Non-character array cannot be interpreted as character buffer

ich mit versucht, aber das gibt mir:

IndexError: tuple index out of range

Beliebig Idee wie kann ich das lösen? Beachten Sie, dass d nur ein einzelner Wert ist, der die Summe einiger Zahlen darstellt.

+0

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

+1

f.write (str (d)) – chris

Antwort

3

Um in eine Datei schreiben zu können, benötigt python Strings oder Bytes, keine Zahlen. Versuchen:

f.write('%s' % d) 

oder

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

Auf der anderen Seite, wenn Sie eine numpy Array in eine Datei schreiben möchten und später las sie wieder in als numpy Array, verwenden Sie die Beize Modul .

1

Versuchen Sie, d in eine Zeichenfolge zu konvertieren, bevor Sie sie schreiben.

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

Beachten Sie auch die Verwendung des with Kontext-Manager, die eine gute Praxis ist, immer zu verwenden, wenn Dateien zu öffnen.

1

write erwartet ein codiertes Byte-Array. Wenn Sie Python 2 immer noch codieren, können Sie f.write('{:d}\n'.format(d)) verwenden.

In Python 3 können Sie stattdessen den Reiniger print(d, file=f) verwenden.

0

Ich kann nicht genau sagen, wenn der Rest des Codes korrekt ist oder nicht, aber ich habe bemerkt, dass Sie nicht den Dateityp im Code angeben:

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

Wenn es ein .txt sind Sie gehen denn es sollte lesen:

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

Vorausgesetzt, Sie arbeiten mit Numpy kann ich vorschlagen, dass Sie einen Blick auf Pandas. Dieses Paket verfügt über eine Reihe von Eingabe-/Ausgabefunktionen/Methoden, die mit seinem Datenrahmen (2D-Array) verknüpft sind, z. B. to_csv. Sie können Header-Informationen mit diesen Funktionen leicht lesen und schreiben, und es wird sich um die Konvertierung von Nummer zu String und wieder zurück kümmern.

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) 
Verwandte Themen