2014-09-12 9 views
5

Wykonuję obliczenia po odczytaniu pliku i chcę zapisać wynik (jeden numer) w innym pliku. Chcę móc później zrobić rzeczy z tym plikiem. Mam problemy z zapisaniem wyniku w pliku tekstowym.Jak zapisać wynik obliczenia do pliku w pythonie?

Próbowałem to:

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

co daje mi ten błąd na linii f.write(d):

Non-character array cannot be interpreted as character buffer

Próbowałem też za pomocą np.savetxt('test.dat',d) ale to daje mi:

IndexError: tuple index out of range

Any pomysł, jak mogę to rozwiązać? Zauważ, że d to tylko jedna wartość, która jest sumą kilku liczb.

+0

spróbować http://stackoverflow.com/questions/13255758/numpy-savetxt-tuple-index-out-of-range – user2085282

+1

f.write (STR (d)) – chris

Odpowiedz

3

Aby zapisać do pliku, python żąda ciągów lub bajtów, a nie liczb. Spróbuj:

f.write('%s' % d) 

lub

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

Z drugiej strony, jeśli chcesz napisać numpy tablicy do pliku, a następnie odczytać go z powrotem w jako numpy tablicy, użyć modułu ogórkowy .

1

Spróbuj przekonwertować d na ciąg przed napisaniem go.

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

pamiętać także korzystanie z menedżera with kontekstowego, która jest dobra praktyka, aby zawsze używać podczas otwierania plików.

1

write oczekuje kodowanej tablicy bajtów.

Jeśli nadal kodujesz Python 2, możesz użyć f.write('{:d}\n'.format(d)).

Zamiast tego w Pythonie 3 można użyć odkurzacza print(d, file=f).

0

Nie mogę powiedzieć dokładnie, jeśli reszta kodu jest poprawne, czy nie, ale zauważyłem, że nie należy określić typ pliku w kodzie:

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

Jeśli jest to .txt idziesz powinno to być następujące:

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

Biorąc pod uwagę, że pracujesz z Numpy, proponuję, abyś rzucił okiem na Pandy. Pakiet ten zawiera szereg funkcji/metod wejścia/wyjścia powiązanych z jego ramką DataFrame (tablica 2D), taką jak to_csv. Możesz łatwo odczytać i zapisać informacje o nagłówku za pomocą tych funkcji, a zajmie się konwersją z numeru na ciąg iz powrotem.

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) 
Powiązane problemy