场景:1、IOS手机和Android手机联系人同步时有部分重复联系人。

   2、很早以前的HTC手机导出的联系人中备注信息有大量乱码,且很多联系人生日被设置为1970-01-01,导致生日提醒软件产生骚扰问题。

适用设备平台:IOS,Android

联系人备份软件:腾讯应用宝

关键字:Python,xml

整体步骤:

  1、下载腾讯应用宝(非打广告,该支持excel,xml,csv等多种格式的联系人备份文件导入导出)

  2、手机连接PC,打开应用宝,导出联系人为xml文件。

  3、代码实现,生成新的联系人xml文件Contactrsp.xml:

 #!/usr/bin/env python
# encoding: utf-8
"""
@version: v1.0
@author: Elijahxb
@time: 2017/12/3 12:13
"""
import xml.etree.ElementTree as ET
from lib.Global.GlobalPath import *#可自行定义资源文件路径变量resource_path
import os xmlPath = os.path.join(resource_path,"XML","FullContact.xml")
tree = ET.parse(xmlPath)
root = tree.getroot()
con_node_list = root.findall("Contact")
print len(con_node_list)
index = 0
con_dic = {}
for con_node in con_node_list:
PhoneList_node = con_node.find("PhoneList")
if PhoneList_node is not None:
con_name = con_node.find("Name").text
PhoneNumber_list = PhoneList_node.findall("Phone")
if PhoneNumber_list:
con_dic[con_name] = []
for PhoneNumber in PhoneNumber_list:
telephone = PhoneNumber.text
if telephone[:4] == ("+86-"):
telephone = telephone[4:]
con_dic[con_name].append(telephone)
elif telephone[:3] == "" or telephone[:4] == "" or telephone[:3] == "":
pass
elif telephone == "18000000000":
pass
elif u"专线" in con_name:
pass
else:
con_dic[con_name].append(telephone)
if con_dic[con_name] == []:
con_dic.pop(con_name)
index += 1
print len(con_dic) root = ET.Element("Contacts")
for k in con_dic:
print k,con_dic[k]
Contact_node = ET.SubElement(root,"Contact")
Name_node = ET.SubElement(Contact_node,"Name")
Name_node.text = k
PhoneList_node = ET.SubElement(Contact_node,"PhoneList")
for telephone in con_dic[k]:
phone_node = ET.SubElement(PhoneList_node,"Phone",{"Type":""})
phone_node.text = telephone tree = ET.ElementTree(root)
f_path = os.path.join(resource_path,"XML","Contactrsp.xml")
tree.write(f_path,encoding="utf-8")

  4、删除手机联系人,导入Contactrsp.xml文件,结束。

  5、实现效果:a.同名联系人的号码会被合并到同名联系人下。b.自定义过滤器,将拦截软件生成的400,106等号码删除,名称为**专线**的号码删除。

记录一次手机联系人整理(XML文件格式处理)的更多相关文章

  1. Android-AsyncTask异步任务(获取手机联系人)

    本篇随笔将讲解一下Android的多线程的知识,以及如何通过AsyncTask机制来实现线程之间的通信. 一.Android当中的多线程 在Android当中,当一个应用程序的组件启动的时候,并且没有 ...

  2. android131 360 05 手势触摸滑动,sim卡,开机启动的广播,手机联系人,SharedPreferences,拦截短信

    安卓手势触摸滑动: package com.itheima52.mobilesafe.activity; import android.app.Activity; import android.con ...

  3. android利用ContentResolver访问者获取手机联系人信息

    转载自:http://www.jb51.net/article/106379.htm 首先需要在AndroidManifest.xml文件中添加权限: <uses-permission andr ...

  4. Android 读取手机联系人、拨号、发送短信及长按菜单的操作

    本示例实现了读取手机联系人,拨号.发送短信及长按出现菜单选项的操作↓ 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下↓ a, main.xml 程序运行的主界面,主要 ...

  5. Entity framewok 如何实现多条记录作为一条取出, for xml path如何实现

    http://www.myexception.cn/linq/1288046.html Entity framewok 怎么实现多条记录作为一条取出, for xml path怎么实现News表:ID ...

  6. xml文件格式例如以下

    xml文件格式例如以下:     <?xml   version="1.0"   encoding="utf-8"?>         <us ...

  7. 手势识别=读取手机联系人=ContentResolver-Day3

    手势识别=读取手机联系人=ContentResolverDay32 mobile3.0 手机设置向导页面完成 选择器没有做完成 样式提取完成 自定义控件的优化继续 抽取父类Activity 完成 手机 ...

  8. Expo大作战(三十九)--expo sdk api之 DocumentPicker,Contacts(获取手机联系人信息),Branch

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  9. cve-2010-3333 Microsoft Office Open XML文件格式转换器栈缓冲区溢出漏洞 分析

    用的是泉哥的POC来调的这个漏洞 0x0 漏洞调试    Microsoft Office Open XML文件格式转换器栈缓冲区溢出漏洞 Microsoft Office 是微软发布的非常流行的办公 ...

随机推荐

  1. pdf2swf+flexpaper解决pdf在线阅读(类百度文库)

    1:工具准备swftools.exe 下载 http://www.swftools.org/download.html 安装至D盘 SWFTools提供了一系列将各种文件转成swf的工具: font2 ...

  2. mysql中使用instr替换like

    使用内部函数instr,可代替传统的like方式查询,并且速度更快. instr函数,第一个参数是字段,第二个参数是要查询的串,返回串的位置,第一个是1,如果没找到就是0. 实例: SELECT o. ...

  3. Windows环境下CGAL的安装

    1 准备工作 下载cmake 下载CGAL安装包 学习如何设置环境变量 安装Qt运行demos. libQGLViewer用来运行 3D CGAL demos. 确定Visual Studio 相应的 ...

  4. python字典方法

    本文参考自<python基础教程 (第二版)> 操作 语法 举例 结果 建立字典 dict() 1.以关键字参数建立字典 2.以其他映射作为参数建立字典 1.d = dict(name=' ...

  5. C# 之二进制序列化

    序列化:又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方. 一般有三种方式:1.是使用BinaryF ...

  6. Django中ORM增删改查

    新建模型 class Author(models.Model): nid = models.AutoField(primary_key=True) name=models.CharField( max ...

  7. ICE的连接机制

    1.当使用ICE的proxy进行方法调用时,ICE运行环境会建立一个到服务器的连接.当proxy提供了多个endpoint时   默认的ICE运行环境选择endpoint的行为为random,可以通过 ...

  8. 小组项目需求——NABCD

    关于项目微食堂的NABCD: N(need): 就我自己而言,每天在上午三四节课时就会想中午吃什么.而且大部分的课在二教,离食堂较远.可能会面临“抢不到饭”的问题.首先不知道去哪吃.吃什么,尤其在时间 ...

  9. 【javascript常见面试题】常见前端面试题及答案

    转自:http://www.cnblogs.com/syfwhu/p/4434132.html 前言 本文是在GitHub上看到一个大牛总结的前端常见面试题,很多问题问的都很好,很经典.很有代表性.上 ...

  10. JavaWeb框架_Struts2_(一)----->Struts2 框架入门

    1.  框架入门 2.1  Struts2简介 (1). Struts2是一种基于MVC模式的的轻量级Web开发框架. MVC模式:MVC全名是Model View Controller,是模型(mo ...