我们实验使用Python代码来解析下面的文件:
first last email
john smith [email protected]
jane doan [email protected]
david neilson [email protected]
首先我们通过命令行输入带读取的文件名,通过readline函数提取文件的表头信息。然后通过for......in.......逐行读取文本中的信息:读取过程中,使用zip函数将表头信息和对应的表项内容进行打包,得到的结果类似于[('first', 'john') ('last', 'smith') ('email', '[email protected]')]。最后dict构造函数接受一个列表,将列表中每个元组的第一个元素作为字典的键,第二个元素作为字典的值,并将结果追加到列表当中,并打印出来。
import sys
filename = sys.argv[1]
contacts = []
with open(filename) as file:
header = file.readline().strip().split()
for line in file:
line = line.strip().split()
content = zip(header, line)
contacts.append(dict(content))
for contact in contacts:
print("email: {email} -- {first}, {last}".format(**contact))
如果使用Python当中的列表解析,那么上述代码可以更为简洁,但相对而言,影响了代码的可读性:
import sys
filename = sys.argv[1]
contacts = []
with open(filename) as file:
header = file.readline().strip().split()
contacts = [ dict(zip(header,line.strip().split())) for line in file]
for contact in contacts:
print("email: {email} -- {first}, {last}".format(**contact))
补充说明:
使用strip函数可以去除文本末尾的制表符、换行符,而split函数则按照空白字符对文本进行分割(默认),最终返回一个列表对象。