python程序改写:

已知有两个文件,电话号码簿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.')