[ Bouncer @ 28.09.2006. 06:52 ] @
Treba mi mala pomoc... :)

Imam program koji mi dodaje u neki file ono sto mu zadam...

Evo primjera :

Code:

file_exe = raw_input('>>') 

def file_mod():
    file = open ( file_exe, 'w' )
    x = '*'
    file.write(x)
    file.close()
file_mod()


Sada tu se radi o appendu...
Gledao sam na netu neku dokumentaciju o replace-u i random replace-u dijelova nekog fajla (u mom slucaju odredjenih karaktera) al nisan sve uspia povatat...
Doduse tek san pocea nedavno radit u pythonu...
Pa mi treba mala pomoc...
Zanima me kako bi izgledao kod koji bi umjesto da dodaje nesto u fajl zapravo zamjeni neki dio fajla koji mu ja odredim ili nasumicno uzme neki dio bytova iz fajla i zamjeni ih nasumicno nekim bytovima odnosno karakterima koje ja odredim...

Hvala,
[ BigBrother2005 @ 28.09.2006. 07:09 ] @
Trebash fajl otvoriti u append modu

Code:

file_exe = raw_input('>>') 
def file_mod():
     file = open ( file_exe, 'a' )
     x = '*'
     file.write(x)
     file.close()
file_mod()


a mogao si napisati ovako

Code:

file_exe = raw_input('Unesi Ime Fajla>>') 
file_add = raw_input('Unesi String za dodavanje>>') 
def file_mod(x):
     file = open ( file_exe, 'a' )
     file.write(x)
     file.close()
file_mod(file_add)
[ Bouncer @ 28.09.2006. 10:30 ] @
Hvala na sugestiji al nemam ja problema sa skriptom vec sa replacementom...
[ Alef @ 28.09.2006. 12:19 ] @
Ne mogu baš da se pohvalim da sam tačno razumeo šta pokušavaš da uradiš, ali zar nije najjednostavnije da učitaš file u memoriju i onda obaviš na tom stringu sve što ti treba i ponovo ga upišeš nazad u file.

Code:

s = open(file_name, 'r').read()
s = s.replace(nesto, nesto_drugo)
open(file_name, 'w').write(s)


Možeš i da se krećeš kroz file sa funkcijom seek, ali onda moraš da paziš da stringovi kojima zamenjuješ delove file-a budu iste dužine sa onima koje zamenjuješ, jer ćeš pretabati i nešto što ne želiš.
[ anrxc @ 28.09.2006. 13:03 ] @
http://pleac.sourceforge.net/pleac_python/
[ Bouncer @ 28.09.2006. 13:25 ] @
Hvala !

Code:
s = open(file_name, 'r').read()
s = s.replace(nesto, nesto_drugo)
open(file_name, 'w').write(s)



Znaci kratko i jasno random odabrani karakteri unutar fajlova bit ce zamjenjeni random odabranim karakterima iz liste.

Ako san sve to dobro svatia sad ja mogu definirat nesto_drugo kao funkciju koja random odabire neke karaktere iz liste koju cu napravit.

Ali jos mi ostaje samo da moram definirat nesto kao funkciju koja random uzima karaktere iz fajla i zamjenjuje ih s nesto_drugo i da to sve bude jednaki broj karaktera da nebi doslo do konfuzije kako ti kazes odnosno sranja...

E to ne znam kako odredit da nesto bude uzeto random iz fajla i ne znam
kako odredit to da bude sve iste velicine da ne dodje do gluposti ?
Nesto sa len() mozda ?


Hvala !
[ Alef @ 28.09.2006. 15:24 ] @
Skini IPython i igraj se malo... To je najjednostavniji način da naučiš python.

Nisi dobro shvatila. nesto i nesto_drugo su stringovi.

Ako hoćeš da zameniš random izabran karakter iz file-a, možeš da uradiš nešto tipa:

Code:

import random
s = open(file_name, 'r').read()
i = random.randint(0, len(s))
s = s[:i] + tvoj_novi_karakter + s[i+1:]
open(file_name, 'w').write(s)


Ili nešto tipa:

Code:

import random

f = open(file_name, 'r+')
f.seek(0, 2)
length = f.tell()
f.seek(0)

i = random.randint(0, length)

f.seek(i)
f.write(tvoj_novi_karakter)
f.close()
[ Bouncer @ 28.09.2006. 16:50 ] @
Ovo bi zavrsilo posa samo sto u ovom slucaju tvoj_novi_karakter moze bit samo string ali ne i tuple...


[ Bouncer @ 28.09.2006. 20:13 ] @
Evo :

Code:

    f = open(file_name, 'r+')
    f.seek(0, 2)
    length = f.tell()
    f.seek(0)
    i = random.randint(0, length)
    f.seek(i)
    for x in range(3):
        f.write(random.choice(['0', '1', '10']))
    f.close()


Hvala na pomoci oko ovoga...

Medjutim imam jos jedan problem...

Zanima me kako definirat vrijednost 1 bajta i spremit ga u file kao karakter ?
[ Bouncer @ 29.09.2006. 23:13 ] @
Zavrsio sam program...

Hvala svima na pomoci...