enumerate()是python内置方法,遍历序列中的元素以及下标,返回元组。
例子:
l1=["a","b","c","d","e","f"]
for item in enumerate(l1):
print (item)
# 结果:
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
(4, 'e')
(5, 'f')
for x,item in enumerate(l1):
print (x,item)
# 结果:
0 a
1 b
2 c
3 d
4 e
5 f
案例:利用open方法从文件读书配置信息,进行分析
baseftp.ini配置文件信息:
======
# user passwd privilege path
# neo 123456 elradfmwM /home/neo/data
neo 123456 elradfmwM /home/neo
======
测试代码:
#!/bin/python3.5
# -- coding:utf-8 --
# 判断是否包含#号的行,如果是,则返回此行的#号之前的数据,如果#号在第一,返回空列表
def ignor_octothrpe(text):
for x,item in enumerate(text):
if item == "#":
return text[:x] # 切片返回的数据类型也是为str
pass
return text # str数据类型
def init_user_config():
try:
f = open("baseftp.ini",encoding='utf-8')
f.close()
except:
print ("config file not found.")
exit (1)
while 1: # 无限循环,达到目的,利用内部的break跳出此循环
line = f.readline() # line为读取配置文件的每一行,readline()一行一行的读取,line为str字符串类型数据
if len(ignor_octothrpe(line)) > 3: # ignor_octothrpe(line) 返回的是一个字符串类型的数据,作为len的变量,得到还是一个字符串,
大于3,进行user_list.append,是否不够合理?
user_list.append(line.split()) # split方法讲字符串,以空格为分隔符号进行分列,每列追加到user_list列表
if not line: # line行读完,即可跳出循环
break
if __name__ == '__main__':
user_list = []
init_user_config()
print (user_list) # 得到的最终这样的列表[['neo', '123456', 'elradfmwM', '/home/neo']]