Muszę więc nagrać zestaw 4 liczb całkowitych, których wartości są różne dla każdej sekundzie dnia. tj .:Edycja pojedynczej linii w dużym pliku tekstowym
#Here the values are initialized to the same value, however they will change as samples are taken
data = [[.25 for numData in range(4)] for numSecs in range(86400)]
Teraz oczywiście dwuwymiarowa macierz (GAH jego Python, listy), którego pierwszy indeks długość wynosi 86400 jest dość niepraktyczne. Zamiast tego chcę utworzyć plik tekstowy z 86400 wierszy sformatowane jako takie:
numSec data0 data1 data2 data3
0 .25 .25 .25 .25
1 .25 .25 .25 .25
2 .25 .25 .25 .25
...
I jak pobierane są próbki, chcę móc edytować ten plik, ba, chcę móc edytować linię plik, którego numSec = drugi po pobraniu próbki. Na przykład, próbka pobrana w numSec = 2 (2 sekundy po północy) mogłyby spowodować mój program do edycji pliku, tak aby:
0 .25 .25 .25 .25
1 .25 .25 .25 .25
2 .70 .10 .10 .10
...
wydaje się dość proste, muszę jeszcze przeczytać kilka postów, które pokazały, jak na przepisać singiel w pliku tekstowym. Problem polega na tym, że wszystkie one wymagają przeczytania w całym pliku. Nie chcę, aby mój program czytał 86 400 linii na sekundę.
W ten sposób dochodzimy do mojego pytania: Czy mogę odczytać pojedynczą linię w pliku tekstowym, edytować i zapisać ją w pliku, bez czytania całego pliku za każdym razem, gdy trzeba wprowadzić zmianę?
P.S. Powinienem zauważyć, że korzystam z Ubuntu 12.04 (Precise) i to jest do użytku w węźle ROS
PPS Ten program będzie działać przez dowolną liczbę dni, aby każdy "drugi" danych mógł być wielokrotnie czytany i przepisywany . Innym powodem, dla którego chciałbym użyć pliku, jest to, że system musi zostać wyłączony, chciałbym zapisać dystrybucje przy następnym uruchomieniu.
Jeśli każdy wpis w pliku ma ustaloną długość, być może 'mmap'. Inaczej, rozważ bazę danych. – Jokester
Jeśli każdy wpis ma stałą długość, możesz _powidzieć plik w trybie binarnym, obliczyć przesunięcie, 'seek' i' write' na miejscu.(To będzie działać również w trybie tekstowym, o ile uwzględnisz nowe linie i szerokości znaków, ale jest to technicznie nielegalne.) Jednak 'mmap' prawdopodobnie będzie prostsze, więc daj +1 jokesterowi. – abarnert
Co sprawia, że przechowywanie 86400 zestawów po 5 liczb jest problemem? W każdym razie musisz pisać średnio połowę pliku co sekundę. Ponadto, każda sekunda będzie zajmować się linią bezpośrednio po poprzedniej linii - dlaczego nie zachować wszystkiego w pamięci? – Neil