Operacje na plikach - lamerskie pytanie
..:: sjf ::.. - 28-10-2005 00:02
Operacje na plikach - lamerskie pytanie
Witam,
Czy istnieje sposób zapisu danych do pliku na pozycji innej niż koniec pliku? Chodzi mi o nadpisanie danych w pliku na określonej pozycji i o określonej długości. Otwieram plik w trybie a+b, ustawiam się na określonej pozycji, zapisuję i... niestety dopisuje na końcu pliku...
fragment kodu: data = raw_input('nowa wartość: ')
f = open('test.dat','a+b') f.seek(128,0) f.write(data) f.close()
-- [ sjf | JID:sjf[at]chrome[dot]pl | gg:2604451 | PGP/GPG ID: 0x74564AF3 ] [ Zbieram na procka, dorzuć 1PLN --> mBank 23 114020040000380223576700 ] "2 nie jest równe 3 - nawet dla dużych wartości 2."
Daniel Mróz - 28-10-2005 00:02
In article <djo29u$n8a$1@nemesis.news.tpi.pl>, somebody@unknown.org says... > Czy istnieje sposób zapisu danych do pliku na pozycji innej niż koniec > pliku? Chodzi mi o nadpisanie danych w pliku na określonej pozycji i o > określonej długości. Otwieram plik w trybie a+b, ustawiam się na > określonej pozycji, zapisuję i... niestety dopisuje na końcu pliku... AFAIK sie nie da. Nie bardzo takze sobie to wyobrazam. System mialby po kazdym zapisanym bajcie przepisywac pozostala czesc pliku? Nieetyczne, nieekonomiczne. Jesli edytujesz duze pliki, to mozesz zbudowac sobie bufor, do ktorego zapisujesz zmiany, a przy zapisie pliku scalasz wszystko w jeden strumien.
Pozdrawiam Beorn
Maciej Dziardziel - 28-10-2005 00:02
...:: sjf ::.. wrote:
> Czy istnieje sposób zapisu danych do pliku na pozycji innej niż koniec > pliku? Chodzi mi o nadpisanie danych w pliku na określonej pozycji i o > określonej długości. Otwieram plik w trybie a+b, ustawiam się na > określonej pozycji, zapisuję i... niestety dopisuje na końcu pliku...
> f = open('test.dat','a+b')
Bo mu tak kazałeś. Przeczytaj dokumentację do funkcji file odnośnie trybu w jakim otwierasz plik.
-- Maciej "Fiedzia" Dziardziel (fiedzia (at) fiedzia (dot) prv (dot) pl) www.fiedzia.prv.pl
Does a person ever get sick without being tired?
..:: sjf ::.. - 28-10-2005 00:02
Daniel Mróz napisał(a): > In article <djo29u$n8a$1@nemesis.news.tpi.pl>, somebody@unknown.org > says... >> Czy istnieje sposób zapisu danych do pliku na pozycji innej niż koniec >> pliku? Chodzi mi o nadpisanie danych w pliku na określonej pozycji i o >> określonej długości. Otwieram plik w trybie a+b, ustawiam się na >> określonej pozycji, zapisuję i... niestety dopisuje na końcu pliku... > AFAIK sie nie da. Nie bardzo takze sobie to wyobrazam. System mialby po > kazdym zapisanym bajcie przepisywac pozostala czesc pliku? Nieetyczne, > nieekonomiczne.
W innych językach się da...
-- [ sjf | JID:sjf[at]chrome[dot]pl | gg:2604451 | PGP/GPG ID: 0x74564AF3 ] [ Zbieram na procka, dorzuć 1PLN --> mBank 23 114020040000380223576700 ] "2 nie jest równe 3 - nawet dla dużych wartości 2."
..:: sjf ::.. - 28-10-2005 00:02
Maciej Dziardziel napisał(a): > ..:: sjf ::.. wrote: > >> Czy istnieje sposób zapisu danych do pliku na pozycji innej niż koniec >> pliku? Chodzi mi o nadpisanie danych w pliku na określonej pozycji i o >> określonej długości. Otwieram plik w trybie a+b, ustawiam się na >> określonej pozycji, zapisuję i... niestety dopisuje na końcu pliku... > >> f = open('test.dat','a+b') > > Bo mu tak kazałeś. Przeczytaj dokumentację do funkcji file > odnośnie trybu w jakim otwierasz plik. >
Czytałem. [...]and 'a' opens it for appending (which on some Unix systems means that all writes append to the end of the file, regardless of the current seek position). Modes 'r+', 'w+' and 'a+' open the file for updating[...] Tyle, że ja pracuję w Windowsie, a w dokumentacji piszą, że w niektórych Unixach dopisuje na końcu bez względu na bieżącą pozycję. Dlatego też zadałem pytanie.
-- [ sjf | JID:sjf[at]chrome[dot]pl | gg:2604451 | PGP/GPG ID: 0x74564AF3 ] [ Zbieram na procka, dorzuć 1PLN --> mBank 23 114020040000380223576700 ] "2 nie jest równe 3 - nawet dla dużych wartości 2."
Maciej Dziardziel - 28-10-2005 00:02
...:: sjf ::.. wrote:
> seek position). Modes 'r+', 'w+' and 'a+' open the file for updating[...] > Tyle, że ja pracuję w Windowsie, a w dokumentacji piszą, że w niektórych > Unixach dopisuje na końcu bez względu na bieżącą pozycję. Dlatego też > zadałem pytanie.
Otwórz w trybie r+.
-- Maciej "Fiedzia" Dziardziel (fiedzia (at) fiedzia (dot) prv (dot) pl) www.fiedzia.prv.pl
Swift gratitude is the sweetest. - Greek Proverb.
Tupteq - 28-10-2005 00:02
...:: sjf ::.. wrote: > Czy istnieje sposób zapisu danych do pliku na pozycji innej niż koniec > pliku? Chodzi mi o nadpisanie danych w pliku na określonej pozycji i o > określonej długości. Otwieram plik w trybie a+b, ustawiam się na > określonej pozycji, zapisuję i... niestety dopisuje na końcu pliku...
Zamiast 'a+b' użyj trybu 'r+b' i po problemie. Sprawdziłem u siebie na Windzie i przy 'a+b' i seek() też dodaje mi na końcu.
-- Pozdro... Tupteq
Piotr Dembiński - 28-10-2005 00:02
"..:: sjf ::.." <somebody@unknown.org> writes:
> Witam, > > Czy istnieje sposób zapisu danych do pliku na pozycji innej > niż koniec pliku?
Do czegoś takiego służą właśnie DBMSy. Zwykłe pliki są proste jak drut, szczególnie z poziomu CPythona.
Piotr Dembiński - 28-10-2005 00:02
"..:: sjf ::.." <somebody@unknown.org> writes:
[...]
> W innych językach się da...
Pod Pythonem też się da, tylko trzeba pokombinować :)
Piotr Dembiński - 28-10-2005 00:02
Tupteq <tupteqCIACH@CIACHtlen.pl> writes:
[...]
> Sprawdziłem u siebie na Windzie i przy 'a+b' i seek() też dodaje > mi na końcu.
Bo jak chcesz 'biegać' po danych to albo je wczytujesz do pamięci, a później zapisujesz zmodyfikowane, albo dzielisz dane na małe pliki, tak żeby modyfikowana porcja była w jednym z nich albo używasz DBMSa.
Grzegorz Szyszlo - 30-10-2005 10:53
Piotr Dembiński napisał(a): > Tupteq <tupteqCIACH@CIACHtlen.pl> writes:
>>Sprawdziłem u siebie na Windzie i przy 'a+b' i seek() też dodaje >>mi na końcu. > > > Bo jak chcesz 'biegać' po danych to albo je wczytujesz do pamięci, > a później zapisujesz zmodyfikowane, albo dzielisz dane na małe > pliki, tak żeby modyfikowana porcja była w jednym z nich albo > używasz DBMSa.
albo odpowiednio dobrany binarny format pliku :)
znik.
Piotr Dembiński - 30-10-2005 10:53
Grzegorz Szyszlo <znik@wbc.lublin.pl> writes:
> Piotr Dembiński napisał(a): >> Tupteq <tupteqCIACH@CIACHtlen.pl> writes: > >>> Sprawdziłem u siebie na Windzie i przy 'a+b' i seek() też dodaje >>> mi na końcu. >> Bo jak chcesz 'biegać' po danych to albo je wczytujesz do pamięci, >> a później zapisujesz zmodyfikowane, albo dzielisz dane na małe >> pliki, tak żeby modyfikowana porcja była w jednym z nich albo >> używasz DBMSa. > > albo odpowiednio dobrany binarny format pliku :)
Binarnych formatów lepiej unikać. Ja bym zatrudnił właśnie jakiś DBMS. Niekoniecznie Oracle, może coś lżejszego.
RobertSzefler - 30-10-2005 10:53
Piotr Dembiński wrote:
> Binarnych formatów lepiej unikać. Ja bym zatrudnił właśnie jakiś > DBMS. Niekoniecznie Oracle, może coś lżejszego.
Bo DBMS nie używa plików binarnych ;)
Piotr Dembiński - 30-10-2005 10:53
RobertSzefler <NOSPAMrszeflerNOSPAM@murator.com.pl> writes:
> Piotr Dembiński wrote: > >> Binarnych formatów lepiej unikać. Ja bym zatrudnił właśnie jakiś >> DBMS. Niekoniecznie Oracle, może coś lżejszego. > > Bo DBMS nie używa plików binarnych ;)
Nie no używa, ale od razu masz do tego interfejs. Np. można zastosować moduł gdbm.
Grzegorz Szyszlo - 04-11-2005 23:20
Piotr Dembiński napisał(a):
>>>>Sprawdziłem u siebie na Windzie i przy 'a+b' i seek() też dodaje >>>>mi na końcu. >>> >>>Bo jak chcesz 'biegać' po danych to albo je wczytujesz do pamięci, >>>a później zapisujesz zmodyfikowane, albo dzielisz dane na małe >>>pliki, tak żeby modyfikowana porcja była w jednym z nich albo >>>używasz DBMSa. >> >>albo odpowiednio dobrany binarny format pliku :) > > Binarnych formatów lepiej unikać. Ja bym zatrudnił właśnie jakiś > DBMS. Niekoniecznie Oracle, może coś lżejszego.
Z armaty do muchy strzelać od razu nie należy. Masz przecież biblioteki do obsługi plików DBF (i już masz hmmm. "DBMS"), lub formaty plików berkley, które same w sobie operują na odpowiednio dobranych formatach binarnych pliku :)
jak się upierasz przy prawdziwszej bazie, to do tak prościutkich rzeczy zastosuj SQLite.
znik.
=?iso-8859-2?q?Piotr_Dembi=F1ski?= - 04-11-2005 23:20
Grzegorz Szyszlo <znik@wbc.lublin.pl> writes:
[...]
>> Ja bym zatrudnił właśnie jakiś DBMS. Niekoniecznie Oracle, może >> coś lżejszego. > > Z armaty do muchy strzelać od razu nie należy. Masz przecież > biblioteki do obsługi plików DBF (i już masz hmmm. "DBMS"), > lub formaty plików berkley, które same w sobie operują > na odpowiednio dobranych formatach binarnych pliku :)
Nie mówiłem, że koniecznie RDBMS albo OODBMS. ZTCP z zajęć z baz danych, to berkeleyowskie biblioteki też się kwalifikują jako szeroko pojęte systemy zarządzania bazą danych.
> jak się upierasz przy prawdziwszej bazie, to do tak prościutkich > rzeczy zastosuj SQLite.
Acha, czyli w Twoim mniemaniu 'prawdziwa baza danych' to jest coś, co jest obsługiwane w SQL? Zresztą -- to jest raczej temat na pl.comp.bazy-danych, niż tutaj.
-- http://www.piotr.dembiński.prv.pl
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[OT?] Monitory dla =?ISO-8859-2?Q?grafik=F3w_-_pytanie_o_?==?ISO-8859-2?Q?przej=B6ci=F3wki?=
=?ISO-8859-2?Q?kr=F3tkie_pytanie_-_gdzie_forum_grafik=F3?==?ISO-8859-2?Q?w_=28Corel_Painter=29_=3F?=
Pytanie -Papier Nalepka - =?ISO-8859-2?Q?p=B3ytka_w_kszta=B3?==?ISO-8859-2?Q?cie_wizyt=F3wki?=
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
Pytanie o =?ISO-8859-2?Q?kas=EA=2E=2E=2E?=
pytanie o zapytanie z having count = count z innej kolumny
=?iso-8859-2?q?Kr=F3tkie_pytanie_-_PostgreSQL_8=2E2=2E2_i_CREATE_ASSERTION?=
=?iso-8859-2?q?Pytanie_SQL__spe=B3niaj=B1ce_wiecej_jak_jeden_ warunek_na_jednej_kolumnie=2E?=
CA nr 1/2007 - pytanie do tych co =?ISO-8859-2?Q?maj=B1?= ten numer
Re: MS SQL 2000 - Wadliwy optymalizator? (dlugie pytanie...)
zanotowane.pldoc.pisz.plpdf.pisz.pltejsza.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|