Ich habe eine Python-Frage und kann nicht herausfinden, warum dies nicht ausgelöst wird. Unten ist der Code:

import re 
sfname='C:\python_Script\Testmain.txt' 
i=0 
Var1='AS' 
Var2=''
Var3=''

with open("C:\python_Script\Testmain.txt") as file_in:
    lines = []
    for line in file_in:
        lines.append(line)
        if line.startswith('create view [dbo].'):
            print (lines[i])
        if not line.startswith('create view [dbo].'):
            lines[i]=lines[i].replace("_"," ")
            lines[i]= re.sub(r"\bid","key",lines[i])
            Var2=lines[i]
            Var2=re.sub(r"\bkey","Dimension",Var2)
            if not line.endswith("Dimension"):
                Var2='Fact Table'
            Var3=lines[i] +"    "+Var1+"    "+Var2

            print(Var3)
        i+=1

Die Textdatei, aus der ich lese, ist relativ einfach und enthält folgende Attribute:

create view [dbo].Ignore_table
communication_channel_id
user_id
bounce_count
assignment_override_id
create view [dbo].test1
id
test1

Grundsätzlich möchte ich alles mit 'create view [dbo]' ignorieren. und erstellen Sie eine Druckanweisung, die das Wort 'ID' durch 'Schlüssel' ersetzt, ein AS hinzufügt und dann 1 von 2 Dingen ausführt: if) Var2 endet mit 'Schlüssel' und wird durch das Wort 'Dimension' ersetzt. Wenn) var2 nicht mit 'Key' endet, benennen Sie das Ganze in 'Fact table' um.

Aber aus irgendeinem Grund wird diese Sekunde, wenn die Schleife ausgelöst wird, auch wenn sie nicht mit "Dimension" endet und immer "Faktentabelle" lautet. Warum?

1
vmedhe2 19 Feb. 2020 im 20:37

3 Antworten

Beste Antwort

Es gibt einige Variablen, die Sie nicht benötigen, wie zum Beispiel Ihre Variable i und die Liste lines, mit der Sie den Wert der Variablen line einmalig bearbeiten Bei einer Iteration innerhalb Ihrer for -Schleife können Sie die Variable line verwenden, ohne ihren Wert in einer Liste zu behalten. Außerdem muss beachtet werden, dass am Ende jeder Zeile das neue Zeilenzeichen \n steht.

In Bezug auf Ihr Problem liegt der Grund dafür, dass der Wert Var2 immer 'Fact Table' ist, hauptsächlich darin, dass Sie in der Variablen line suchen, anstatt in der Variablen Var2, die Sie ändern

Hier ist eine Version dessen, was Sie erreichen möchten:

sfname='C:\python_Script\Testmain.txt' 
Var1='AS' 
Var2=''
Var3=''

with open(sfname) as file_in:
    for line in file_in:
        line = line.strip()
        if line.startswith('create view [dbo].'):
            print(line)

        else:
            line = line.replace("_", " ")

            # replaces the word 'ID' with 'Key' 
            line = line.replace("id","key")
            Var2 = line

            # if) Var2 ends with 'Key' replace with the word 'Dimension'.
            if Var2.endswith("key"):
                Var2 = 'Dimension'
            else:
                Var2 = 'Fact Table'

            Var3 = line + "    " + Var1 + "    " + Var2

            print(Var3)

Ausgabe:

create view [dbo].Ignore_table
communication channel key    AS    Dimension
user key    AS    Dimension
bounce count    AS    Fact Table
assignment overrkeye key    AS    Dimension
create view [dbo].test1
key    AS    Dimension
test1    AS    Fact Table
1
kederrac 19 Feb. 2020 im 18:28

Vielen Dank, Kederrac. Seine Antwort war zutreffend und brachte mich dahin, wo ich hin musste. Ich glaube, ich musste meine nicht nisten, wenn so viel. für zukünftige googler:

import re
sfname='C:\python_Script\Testmain.txt' 
Var1='AS' 
Var2=''
Var3=''

with open(sfname) as file_in:
for line in file_in:
    line = line.strip()
    if line.startswith('create view [dbo].'):
        print(line)

    else:
        line = line.replace("_", " ")

        # replaces the word 'ID' with 'Key' 
        line = re.sub(r"\bid","key",line)
        Var2 = line

        # if) Var2 ends with 'Key' replace with the word 'Dimension'.
        if Var2.endswith("key"):
            Var2 = line.replace("key","Dimension")
        else:
            Var2 = 'Fact Table'

        Var3 = line + "    " + Var1 + "    " + Var2

        print(Var3)
1
vmedhe2 19 Feb. 2020 im 19:44

Denken Sie daran, dass jede Variable irgendwo im Speicher lebt. Welche Variable enthält die neue Zeichenfolge, wenn Sie \bkey durch Dimension ersetzen? Und welche Variable überprüfen Sie, um festzustellen, ob sie mit Dimension endet?

Achten Sie auf diese Art von Speicherproblemen und fragen Sie sich, ob Sie die Variable selbst oder eine Kopie der Variablen aktualisieren. Diese Arten von Fehlern treten ständig auf.

1
HammerN'Songs 19 Feb. 2020 im 18:09