专栏首页python3python3合并两个文件形成通讯录

python3合并两个文件形成通讯录

学习别人的代码,学习python语法

[root@vps student]# cat TeleAddressBook.txt 

姓名 电话

李四 13567428765

张三 18878972314

王五 18273719921

陈六 19903210032

[root@vps student]# cat EmailAddressBook.txt 

姓名 邮箱

张三 12345678@qq.com

李四 abcdefg@163.com

王五 qwertyg@sina.com

hello 1111111@dd.com

[root@vps student]# cat AddressBook.txt 

姓名 电话 邮箱

李四13567428765abcdefg@163.com

张三1887897231412345678@qq.com

王五18273719921qwertyg@sina.com

陈六19903210032------------

hello------------1111111@dd.com

#!/usr/bin/env python3
#-*- coding:utf-8 -*-

def main():
	ftele1 = open("TeleAddressBook.txt",'r')
	ftele2 = open("EmailAddressBook.txt",'r')
	ftele1.readline()
	ftele2.readline()
	lines1 = ftele1.readlines()
	lines2 = ftele2.readlines()
'''
#读取文件
>>> ftele1 = open("TeleAddressBook.txt",'r')
#去掉文本标题行,也就是跳过第一行
>>> ftele1.readline()
'姓名 电话\n'
#readlines循环读取每一行,构成一个列表
#此处切记:如果文本里面有空行,lines1列表中就会有'\n' .后面列表append的时候就会报错
>>> lines1 = ftele1.readlines()
>>> lines1
['李四 13567428765\n', '张三 18878972314\n', '王五 18273719921\n', '陈六 19903210032\n']
>>> 
>>> lines1[0]
'李四 13567428765\n'
#通过对字符串切片形成列表,取值
>>> lines1[0].split()
['李四', '13567428765']
>>> elements = lines1[0].split()
>>> elements[0]
'李四'
'''
	list1_name = []
	list1_tele = []
	list2_name = []
	list2_email = []
#获取第一个文本中的姓名和电话信息
	for line in lines1:
		elements = line.split()
#此处列表添加有个隐患:文本文件中一定不能有空行,负责append会报错
#IndexError: list index out of range
		list1_name.append(str(elements[0]))
		list1_tele.append(str(elements[1]))
	for line in lines2:
		elements = line.split()
		list2_name.append(str(elements[0]))
		list2_email.append(str(elements[1]))
	lines = []
	lines.append('姓名\t 电话\t 邮箱\t \n')
#遍历列表匹配一样姓名的用户,构造字符串
	for i in range (len(list1_name)):
		s = ''
		if list1_name[i] in list2_name:
			j = list2_name.index(list1_name[i])
			s = '\t'.join([list1_name[i],list1_tele[i],list2_email[j]])
			s += '\n'
		else:
			s = '\t'.join([list1_name[i],list1_tele[i],str('------------')])
			s += '\n'
		lines.append(s)
#处理2中剩余的用户
	for i in range(len(list2_name)):
		s = ''
		if list2_name[i] not in list1_name:
			s = '\t'.join([list2_name[i],str('------------'),list2_email[i]])
			s += '\n'
		lines.append(s)
#写入文件
	ftele3 = open('AddressBook.txt','w')
	ftele3.writelines(lines)
	ftele3.close()
	ftele1.close()
	ftele2.close()
	print("game over")
if __name__ == '__main__':
	main()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python两个列表合并为字典,一个作为

    两个列表合并为一个字典函数list_dic(list1,list2)可以直接复制拿走

    py3study
  • python学习之旅(十六)

    在“主程序”中,变量'_name_'的值是'_main_',而在导入的模块中,这个值就被设定为模块的名字

    py3study
  • 基于python快速实现排列组合算法

    py3study
  • CCF考试——201604-3路径解析

      在操作系统中,数据通常以文件的形式存储在文件系统中。文件系统一般采用层次化的组织形式,由目录(或者文件夹)和文件构成,形成一棵树的形状。文件有内容,用于存储...

    AI那点小事
  • SpringBoot-12-之Ajax跨域访问全解析

    张风捷特烈
  • 教你如何手写一个动态代理【模拟JDK】

    用户4143945
  • [- Flutter 数据&状态篇 -] InheritedWidget

    张风捷特烈
  • 面试官让我用channel实现sync包里的同步锁,是不是故意为难我?

    今天,我将深入探讨Go语言channel和select语句的表达能力。为了演示只用这两个原语就可以实现多少功能,我将从头开始用它们重写sync包。

    KevinYan
  • deploy to heroku

    用户3004328
  • MySQL 中对字符串进行操作:字符串截取

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    学到老

扫码关注云+社区

领取腾讯云代金券