python中的嵌套if循环未触发

2024-09-29 21:28:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python问题,我不明白为什么它没有启动。代码如下:

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

我从中读取的文本文件相对简单,其中包含以下属性:

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

基本上,我想忽略任何带有“create view[dbo]”的内容,创建一个print语句,用“Key”替换单词“ID”,添加AS,然后执行以下两项操作之一: 如果)Var2以“键”结尾,则替换为“尺寸”。 如果)var2未以“Key”结尾,则将整个内容重命名为“Fact table”

但出于某种原因,这一秒如果循环将触发,即使它没有以“维度”结束,并且它将始终是“事实表”,为什么


Tags: inretxtviewidifcreateline
3条回答

记住,每个变量都存在于内存中的某个地方。用Dimension替换\bkey时,哪个变量保存新字符串?你要检查哪个变量,看它是否以Dimension结尾

注意这些内存问题,问问自己是在更新变量本身,还是在更新变量的副本。这些类型的bug会一直出现

谢谢你,凯德拉克,他的回答恰到好处,让我到达了我需要去的地方。我想我不需要为我的孩子安顿那么多。对于未来的谷歌用户:

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)

有一些变量是您不需要的,例如您的变量i和列表lines,您正在使用它们来操作变量line的值。在for循环内的一次性迭代期间,您可以使用变量line,而无需将其值保留在列表中;您还必须注意,每行的末尾是新行字符\n

关于您的问题,为什么Var2值总是'Fact Table'主要是因为您查看的是变量line,而不是正在修改的变量Var2

以下是您试图实现的目标的一个版本:

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)

输出:

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

相关问题 更多 >

    热门问题