[python] najdi, nahrad, uloz v ascii subore

peter borique na gmail.com
Středa Srpen 23 15:18:53 CEST 2006


Diky moc,

pokial som dobre pochopil z manualu tak

content = fd.read()

nacita cely obsah suboru do cache alebo bufferu, a to je prave to co ja
nechcem, pretoze pracujem s velkymi subormi. Chcem sa vyhnut tomu ze
nacitam vsetko do pamate, nahradim co potrebujem a potom to zase vsetko
ulozim. Ale neviem ci je to vobec mozne, nie som az taky velky
specialista v pythone. V mojom kode idem po jednotlivych riadkoch
suboru....


Leos Pol wrote:
> Ahoj,
> omlouvam se, ale nedokazal jsem tvuj kod opravit, tak posilam alespon
> svoje reseni:
>
>     import re
>     fd = open('data.txt', 'r+')
>     content = fd.read()
>     delimiter = re.search('\$-+', content).group()
>     blocks = re.split('\$-+', content)
>     for idx in range(len(blocks)):
>         if 'NAME=\'ALFA\'' in blocks[idx]:
>             code = re.search('CODE=\'(.*)\'', blocks[idx]).groups()
>             blocks[idx] = blocks[idx].replace('NAME=\'ALFA\'',
>     'NAME=\'BETA%s\'' % code)
>     fd.seek(0)
>     fd.write(delimiter.join(blocks))
>     fd.close()
>
> Doufam, ze to pomuze,
> Leo
> PS: nejspise ale asi hledas "seek" a "tell".
>
> peter wrote:
> > Zdravim,
> >
> > potreboval by som poradit.
> >
> > Priklad (jeden blok v subore):
> > $------------------------
> > NAME='ALFA'
> > CODE='x'
> > $------------------------
> >
> > Takychto blokov je v subore vela s roznymi menami a kodmi. Potrebujem
> > naprogramovat skript ktory prehlada cely subor a najde vyrazy s menami
> > ALFA a podla toho co za kazdou ALFOU bude nasledovat (napr. x,y,z)
> > zmeni meno ALFA na BETAx,BETAy, BETAz a zemeneny subor ulozi.
> >
> > Dostal som sa k tomu ze najdem vsetky vyrazy ktore potrebujem, podla
> > kodu zmenim meno na BETAx,y alebo z ale uz neviem ako zapisat nove
> > nazvy na rovnake miesto ako bola dana ALFA. Vzdy mi to zapise na koniec
> > suboru. Tu je moj kod.
> > Dakujem vopred za akukolvek pomoc.
> >
> > Moj kod:
> >
> >  import shutil
> >
> > NamFile="test2.nam"
> > BackupNamFile = 1
> > if BackupNamFile == 1:
> >      shutil.copyfile(NamFile,NamFile.replace(".nam",".nam.bak"))
> > LineNum=1
> > LineNumQuantity=0
> > ArrayCount=0
> > LineNumArray=[]
> > ReqArray=[]
> > ReqName=""
> > NamFileOpen=file(NamFile,"r+")
> > for line in NamFileOpen:
> >      LineTextFound1 = line.find("bk")
> >      LineTextFound2 = line.find("_results")
> >      if LineTextFound1 != -1 and LineTextFound2 != -1:
> >           ReqName=line.split("'")[1]
> >           print "Line: \t\t\t"+ str(LineNum)
> >           print "Request Name: \t\t"+ ReqName
> >           LineNumQuantity = LineNum + 2
> >           ReqArray=[LineNum-2,ReqName]
> >      if LineNum == LineNumQuantity:
> >           QuantityName=line.split("'")[1]
> >           print "Quantity Type: \t\t"+QuantityName
> >           if QuantityName == "dx":
> >                Suffix = "_disp"
> >           elif QuantityName == "vx":
> >               Suffix = "_velo"
> >           elif QuantityName == "fx":
> >                Suffix = "_force"
> >           else:
> >                Suffix = "_results"
> >           print "Suffix: \t\t"+Suffix
> >           NewReqName=ReqName.replace("_results",Suffix,1)
> >           ReqArray.append(NewReqName)
> >           LineNumArray.insert(ArrayCount,ReqArray)
> >           ArrayCount+=1
> >           print "New Request Name: \t"+NewReqName
> >           print "-----------------------"
> >      LineNum = LineNum+1
> > print LineNumArray
> > print len(LineNumArray)
> > NamFileOpen.close()
> >
> > NamFileOpen2=file(NamFile,"r+")
> > LineNum=1
> > for i in LineNumArray:
> >      print i
> >      for line in NamFileOpen2:
> >           print line
> >           print LineNum
> >           print i[1]
> >           if i[0]== LineNum:
> >                print i[0]
> >                print LineNum
> >                print line
> >                Temp=line.replace(line.split("'")[1],i[2],1)
> >                print Temp
> >                NamFileOpen2.write(Temp)
> >           LineNum=LineNum+1
> > NamFileOpen2.close()
> >
> > _______________________________________________
> > Python mailing list
> > Python na py.cz
> > http://www.py.cz/mailman/listinfo/python
> >
>
>
> --
> ----
> Leos Pol
> SW Engineer
> Radiante Corp.
> 
> If it can be imagined,
> we can implement it



Další informace o konferenci Python