已知有两个文件,电话号码簿TelAddBk.txt,邮箱
地址EmailAddBk.txt。要求:将两个文件合并为
AddBk.txt。
分析IPO模式:
I:电话簿、邮箱地址簿文件
P:合并两个文件的内容
O:合并后的电话和邮箱地址簿文件Python
程序步骤:
1. 打开文件,读取文件;
2. 分别获取两个文件的信息,并存放至列表1和列表2;
3. 建立合并用的空列表3,将列表1和2的信息合并到列表3.
3-1 生成信息表头(姓名,电话,邮箱)
3-2 遍历列表1的人,创立列表3的信息(此时应该处理
列表2中与列表1中相同姓名的信息)
3-3 处理列表2中剩余人的信息,合并到列表3
4.将列表3的信息写入到新文件
5. 关闭所有打开的文件Python
程序步骤:
1. 打开文件,读取文件;
fadd1=open('EmailAddBk.txt','rb')
fadd2=open('TeleAddBk.txt','rb')
#第一行数据不要
fadd1.readline()
fadd2.readline()
#读取第一行后的数据
lines1=fadd1.readlines()
lines2=fadd2.readlines()Python
2. 分别获取两个文件的信息,并存放至列表1和列表2;
l1_name=[] #建立空列表存储姓名、电话、Email
l1_tele=[]
l2_name=[]
l2_email=[]
for line in lines1: #读取TeleAddBk中的信息
elements=line.split()
l1_name.append(str(elements[0].decode('gbk')))
l1_tele.append(str(elements[1].decode('gbk')))
for line in lines2: #读取EmailAddBk中的信息
elements=line.split()
l2_name.append(str(elements[0].decode('gbk')))
l2_email.append(str(elements[1].decode('gbk')))Python
3. 建立合并用的空列表3,将列表1和2的信息合并到列表3.
3-1 生成信息表头(姓名,电话,邮箱)
#生成新的数据
lines=[]
lines.append('姓名\t 电话 \t 邮箱\n')Python
3. 建立合并用的空列表3,将列表1和2的信息合并到列表3.
3-2 遍历列表1的人,创立列表3的信息(此时应该处理列表2中
与列表1中相同姓名的信息)
#按索引方式遍历姓名列表
for i in range(len(l1_name)):
s=''
if l1_name[i] in l2_name:
j=l2_name.index(l1_name[i])
s='\t'.join([l1_name[i],l1_tele[i],l2_email[j]])
s+='\n'
else:
s='\t'.join([l1_name[i],l1_tele[i],str(' ---- ')])
s+='\n'
lines.append(s)Python
3. 建立合并用的空列表3,将列表1和2的信息合并到列表3.
3-3 处理列表2中剩余人的信息,合并到列表3
#处理姓名列表2中的剩余姓名
for i in range(len(l2_name)):
s=''
if l2_name[i] not in l1_name:
s='\t'.join([l2_name[i],str(' ---- '),l2_email[i]])
s+='\n'
lines.append(s)Python
4.将列表3的信息写入到新文件
#将生成的合并数据写入新的文件
fadd3=open('AddBk.txt','w')
fadd3.writelines(lines)
5. 关闭所有打开的文件
#关闭文件
fadd3.close()
fadd2.close()
fadd1.close()
print('The AddressBooks are merged.')
在步骤3-2,先遍历EmailAddBK.txt,将数据读入列表3,再读入TelAddBK.txt的剩余数据。
# 打开文件,读取文件;
fadd1 = open('EmailAddBk.txt', 'rb')
fadd2 = open('TeleAddBk.txt', 'rb')
# 第一行数据不要
fadd1.readline()
fadd2.readline()
# 读取第一行后的数据
lines1 = fadd1.readlines()
lines2 = fadd2.readlines()
# 分别获取两个文件的信息,并存放至列表1和列表2;
l1_name = [] # 建立空列表存储姓名、电话、Email
l1_tele = []
l2_name = []
l2_email = []
for line in lines1: # 读取EmailAddBk中的信息
elements = line.split()
l2_name.append(str(elements[0].decode('gbk')))
l2_email.append(str(elements[1].decode('gbk')))
for line in lines2: # 读取TeleAddBk中的信息
elements = line.split()
l1_name.append(str(elements[0].decode('gbk')))
l1_tele.append(str(elements[1].decode('gbk')))
# 建立合并用的空列表3,将列表1和2的信息合并到列表3.
# 3-1 生成信息表头(姓名,电话,邮箱)
lines = []
lines.append('姓名\t 电话 \t 邮箱\n')
# 3-2 遍历列表1的人,创立列表3的信息(此时应该处理列表2中与列表1中相同姓名的信息)
for i in range(len(l1_name)):
s = ''
if l1_name[i] in l2_name:
j = l2_name.index(l1_name[i])
s = '\t'.join([l1_name[i], l1_tele[i], l2_email[j]])
else:
s = '\t'.join([l1_name[i], l1_tele[i], str(' ---- ')])
s += '\n'
lines.append(s)
# 3-3 处理列表2中剩余人的信息,合并到列表3
for i in range(len(l2_name)):
if l2_name[i] not in l1_name:
s = '\t'.join([l2_name[i], str(' ---- '), l2_email[i]])
s += '\n'
lines.append(s)
# 将列表3的信息写入到新文件
fadd3 = open('AddBk.txt', 'w')
fadd3.writelines(lines)
# 关闭所有打开的文件
fadd1.close()
fadd2.close()
fadd3.close()
print('The AddressBooks are merged.')