在我的程序中,我有一个文件,然后读取for循环中的所有行,检查每一行的开头内容。然后将每一行添加为变量。这里有40多行代码,它们几乎是一样的,但是其中一个elif语句不返回true,.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方法
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]这里的
永远不会返回True,即使在文件中有一行以cP开头
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]发布于 2011-03-29 16:07:17
它不起作用,因为以cP开头的行也以c开头,您将c条件放在cP之前。
您应该更好地重构代码,以避免冗长的if/elif链。它是非常不可维护的。我会用字典
results = {}
for line in file:
(key, value) = line.split(':', 1)
results[key] = value
# use results['fN'] for your fN variable甚至更短:
results = dict(line.split(':', 1) for line in file)(如果必须使用fN作为独立局部变量,则可以使用
locals().update(line.split(':', 1) for line in file)但我不推荐。)
发布于 2011-03-29 16:08:10
您应该考虑这两行是如何交互的:
elif line.startswith('c'):
...
elif line.startswith('cP'):此外,您应该研究使用字典保存所有的值,您可以大大缩短您的程序。
发布于 2011-03-29 16:10:38
那是一段相当可怕的代码。你真的需要所有这些元素成为单独的变量吗?为什么不写一本这样的字典:
{'fN':'john',
'fP':'1',
...
}您只可以在几行代码中生成:
dct = {}
f = file(location, 'r')
for line in f:
k, v = line.split(':')
dct[k] = vhttps://stackoverflow.com/questions/5475472
复制相似问题