ďťż
 
Operacje na plikach - lamerskie pytanie ďťż
 
Operacje na plikach - lamerskie pytanie
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • tejsza.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com