.startswith not working

Bra*_*don 0 python file-io for-loop if-statement

在我的程序中,我有一个文件,然后我读取for循环中的所有行,检查每一行的开头.然后将每一行添加为变量.这里有40多行,它们几乎都是一样的但是其中一个elif语句并没有返回真实的.startswith无效.无论如何这里的文件内容基本上是一堆保存的信息fN将是我保存的变量,john将是我想要的.所以这个方法就是这样做的,或者它是假设的

fN:john
fP:1
fE:father email
mN:mother name
mP:1
mE:mother email @ bomg.com
a:1233 adress lane
c:city
s:state
zC:1234534
hP:(1928)phone-1123
cP:1113333
eN:emergancy
eNu:number
c1N:cluubiie 1
c1G:1st
c1B:1-23-34
c2N:clubbie 2
c2G:grade 2
c2B:birth 2
c3N:clubb 3 
c3G:grade 3
c3B:birth 3
Run Code Online (Sandbox Code Playgroud)

方法

def fillWindow(self,student):
    global fileDirectory
    location = os.path.join(fileDirectory, student + '.txt')
    file = open(location, 'r')

    for line in file.xreadlines():
        if line.startswith('fN'):
            fN = line.split(':')[1]
        elif line.startswith('fP'):
            fP = line.split(':')[1]
        elif line.startswith('fE'):
            fE = line.split(':')[1]
        elif line.startswith('mN'):
            mN = line.split(':')[1]
        elif line.startswith('mP'):
            mP = line.split(':')[1]
        elif line.startswith('mE'):
            mE = line.split(':')[1]
        elif line.startswith('a'):
            a = line.split(':')[1]
        elif line.startswith('c'):
            c = line.split(':')[1] 
        elif line.startswith('s'):
            s = line.split(':')[1]
        elif line.startswith('zC'):
            zC = line.split(':')[1]
        elif line.startswith('hP'):
            hP = line.split(':')[1]
Run Code Online (Sandbox Code Playgroud)

就在这里即使在文件中有一行以cP开头,也永远不会返回True

        elif line.startswith('cP'):
            cP = line.split(':')[1]
            print('True') 
        elif line.startswith('eN'):
            eN = line.split(':')[1]
        elif line.startswith('eNu'):
            eNu = line.split(':')[1]
        elif line.startswith('c1N'):
            c1N = line.split(':')[1] 
        elif line.startswith('c1G'):
            c1G = line.split(':')[1]
        elif line.startswith('c1B'):
            c1B = line.split(':')[1] 
        elif line.startswith('c2N'):
            c2N = line.split(':')[1] 
        elif line.startswith('c2G'):
            c2G = line.split(':')[1]
        elif line.startswith('c2B'):
            c2B = line.split(':')[1]
        elif line.startswith('c3N'):
            c3N = line.split(':')[1] 
        elif line.startswith('c3G'):
            c3G = line.split(':')[1]
        elif line.startswith('c3B'):
            c3B = line.split(':')[1]
        elif line.startswith('c4N'):
            c4N = line.split(':')[1] 
        elif line.startswith('c4G'):
            c4G = line.split(':')[1]
        elif line.startswith('c4B'):
            c4B = line.split(':')[1]
Run Code Online (Sandbox Code Playgroud)

Ned*_*der 8

您应该考虑这两条线如何相互作用:

elif line.startswith('c'):
...
elif line.startswith('cP'):
Run Code Online (Sandbox Code Playgroud)

此外,您应该考虑使用字典来保存所有值,您可以大大缩短您的程序.


Dan*_*man 6

这是一段非常可怕的代码.你真的需要所有这些元素是个体变量吗?为什么不沿着这些方向的字典:

{'fN':'john',
 'fP':'1',
   ...
}
Run Code Online (Sandbox Code Playgroud)

你只能在几行中产生:

dct = {}
f = file(location, 'r')
for line in f:
    k, v = line.split(':')
    dct[k] = v
Run Code Online (Sandbox Code Playgroud)

  • 如果值包含另一个冒号,则可能更喜欢`line.split(":",1)`. (4认同)