Vinnaren i pepparkakshustävlingen!
2016-02-28, 14:42
  #1
Medlem
Försöker ersätta en parameter value i en fil.

Så här kan filen se ut:
Kod:
asdf = xyz.Parameter;
asdf.value = 3;

xxx = xyz.Parameter;
xxx.value = True;

yyy = xyz.Parameter;
yyy.value = 7;

Jag använder mig utav reg ex för att kolla vad parametern heter:

Kod:
paramName = re.compile(r'(\w+)(\W+)(xyz\.Parmeter)', re.MULTILINE)

Och för value:
Kod:
paramValue = re.compile(r'(\w+)(\.Value\W+)(\d+|\w+)', re.MULTILINE)

För tillfälle har jag det här:
Kod:
import re
import string

paramName = re.compile(r'(\w+)(\W+)(xyz\.Parmeter)', re.MULTILINE)
paramValue = re.compile(r'(\w+)(\.Value\W+)(\d+|\w+)', re.MULTILINE)

def xyz():
    with open("file.txt", "r") as f:
        content = f.read()
    		
        getParamNames = re.findall(paramName, 
        getParamValues = re.findall(paramValue, content)
    
        param = [i[0] for i in getParamNames] ## Get first group 
        value = [k[:] for k in getParamValues] ## Get all 
    
        for x in param:
            print "\n", 
            for y in value:
                print  y
                if x in y:
                    print "True"
                    regEx = r'(\w+)(\.Value\W+)({})' ## <----- Här får jag problem
                    a =  re.sub(regEx, r'\1\2hej', y[2])
                    print a
        
                else:
                    print "False"

print xyz()

Jag kan matcha asdf = xyz:Parameter med asdf.value = 3 då jag jämför första elementet i paramName med alla element i paramValue.

Vad jag har förstått så kan man använda sig av re.sub för att ersätta något befintligt med något annat. Men jag kan inte få det att fungera.
Citera
2016-02-28, 15:23
  #2
Medlem
Xer0s avatar
Är detta en config fil?
Du tor inte att du skulle kunna använda json eller ini i stället?

Ex:
https://docs.python.org/2/library/configparser.html
Citera
2016-02-28, 15:33
  #3
Medlem
Citat:
Ursprungligen postat av Xer0
Är detta en config fil?
Du tor inte att du skulle kunna använda json eller ini i stället?

Ex:
https://docs.python.org/2/library/configparser.html
Nää det är ingen config fil utan en vanlig ".m" fil.
Citera
2016-02-29, 16:21
  #4
Moderator
vhes avatar
Vad är det du vill ha för resultat egentligen? Det framgår inte. Skriv gärna ut exakt vad du vill att ditt program skall spotta ur sig, givet indatan du gav det.

Utöver det så kan jag se åtminstone två uppenbara fel:

Följande rad är direkt syntaktiskt felaktig:
Kod:
        getParamNames = re.findall(paramName, 
Du avslutar aldrig den öppna parantesen.

Variabeln getParamValues får aldrig något innehåll. Troligen för att du använder versalt V i Value i ditt regex, men inte i din indata. Samma gäller stället där du gör din substitution.


För så simpel text (om den nu är det i verkligheten) så undrar jag om du behöver blanda in regex alls. Lite .startswith() och .endswith() och .split() duger gott om du itererar över filen radvis. Om indatan faktiskt är så simpel som i ditt exempel, vill säga. Jag tror inte du kan anta att alla vet hur "en vanlig ".m" fil" ser ut. Google indikerar att de har med matlab att göra. Det är inte alla (inkl. undertecknad) som vet hur matlab-filer ser ut.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback