2016-09-14 7 views
5

Potrzebuję napisać 3 numpy tablic w pliku txt. Szef pliku wygląda tak:Jak napisać numpy tablic do pliku .txt, zaczynając od pewnej linii?

#Filexy 
#time operation1 operation2 

The NumPy tablic wyglądać następująco:

time = np.array([0,60,120,180,...]) 
operation1 = np.array([12,23,68,26,...)] 
operation2 = np.array([100,123,203,301,...)] 

W końcu, plik .txt powinien wyglądać następująco (ogranicznik powinien być karta) :

#Filexy 
#time operation1 operation2 
0 12 100 
60 23 123 
120 68 203 
180 26 301 
.. ... ... 

Próbowałem go z "numpy.savetxt" - ale nie dostałem formatu, który chcę.

Dziękuję bardzo za pomoc!

Odpowiedz

4

Nie jestem pewien, co próbowali, ale trzeba użyć parametru header w np.savetxt. Ponadto musisz poprawnie łączyć tablice. Najprostszym sposobem na to jest użycie np.c_, która zmusza twoje tablice 1D do tablic 2D, a następnie łączy je w sposób, jakiego oczekujesz.

>>> time = np.array([0,60,120,180]) 
>>> operation1 = np.array([12,23,68,26]) 
>>> operation2 = np.array([100,123,203,301]) 
>>> np.savetxt('example.txt', np.c_[time, operation1, operation2], 
       header='Filexy\ntime operation1 operation2', fmt='%d', 
       delimiter='\t') 

example.txt zawiera teraz:

# Filexy 
# time operation1 operation2 
0 12 100 
60 23 123 
120 68 203 
180 26 301 

pamiętać także wykorzystanie fmt='%d' uzyskać wartości całkowite w wyjściu. savetxt zapisze domyślnie wartość float, nawet dla tablicy całkowitej.

Odnośnie ogranicznika, wystarczy użyć argumentu delimiter. Nie jest to tutaj jasne, ale istnieją między nimi tabulatory. Na przykład vim pokazuje mi klapki za pomocą kropek

# Filexy 
# time operation1 operation2 
0· 12· 100 
60· 23· 123 
120·68· 203 
180·26· 301 

Uzupełnienie:

Jeśli chcesz dodać nagłówki i dodać dodatkowy wiersz przed tablic, jesteś lepiej tworzenia niestandardowego nagłówka , uzupełnij o własne znaki komentarza. Użyj argumentu comment, aby zapobiec dodawaniu dodatkowych #.

>>> extra_text = 'Answer to life, the universe and everything = 42' 
>>> header = '# Filexy\n# time operation1 operation2\n' + extra_text 
>>> np.savetxt('example.txt', np.c_[time, operation1, operation2],  
       header=header, fmt='%d', delimiter='\t', comments='') 

która produkuje

# Filexy 
# time operation1 operation2 
Answer to life, the universe and everything = 42 
0 12 100 
60 23 123 
120 68 203 
180 26 301 
+1

Nie zapomnij 'separator = '\ t'' –

+0

Bardzo dziękuję! Jeszcze jedna rzecz -> jak mógłbym napisać w trzeciej linii (przed rozpoczęciem tablic) linii, która nie zaczyna się od # (w moim przypadku byłaby to tylko liczba) – Matias

+0

Jeszcze raz dziękuję - próbowałem Twojego Addendum - ale brakowało mi extra_num :). Jeśli to możliwe, kod powinien wyglądać tak: pierwsza linia "#Filexy; druga linia" #time operation1 operation2; trzeci wiersz "42 (bez numeru), czwarty - koniec ...: tablice, dziękuję bardzo za pomoc! – Matias

0

Spróbuj tego:

f = open(name_of_the_file, "a") 
np.savetxt(f, data, newline='\n') 
f.close()