场景: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. 1、C#中Hashtable、Dictionary详解以及写入和读取对比

    在本文中将从基础角度讲解HashTable.Dictionary的构造和通过程序进行插入读取对比. 一:HashTable 1.HashTable是一种散列表,他内部维护很多对Key-Value键值对 ...

  2. 如果看看机器ip和域名ip

    1.如果查看一个机器IP ifconfig或hostname -i //linux ipconfig //windows 2.查看一个域名对应ip ping www.baidu.com 下面会显示域名 ...

  3. gym强化学习入门demo——随机选取动作 其实有了这些动作和反馈值以后就可以用来训练DNN网络了

    # -*- coding: utf-8 -*- import gym import time env = gym.make('CartPole-v0') observation = env.reset ...

  4. 20165210 Java第九周学习总结

    20165210 Java第九周学习总结 教材学习内容 - 第十三章学习总结 URL类: URL的构造方法: try { URL url = new URL("http://www.goog ...

  5. Senior Manufacturing Technical Manager

    Job Description As a Manufacturing Technical Manager, you will be responsible for bringing new produ ...

  6. IE9 placeholder 不兼容的解决

    坑爹的IE9-,真的是够够的了,不过公司不要求兼容这个玩意了,自己觉得兼容这个鬼还是挺有挑战性的,自己也碰到不少难题,一个个解决. css: .placeholderColor { color : # ...

  7. @media screen页面自适应尺寸!!

    @media screen and (max-width:360px){body,input,select{font-size:38%}} @media screen and (min-width:3 ...

  8. Technocup 2019 C. Compress String

    一个字符串 $s$,你要把它分成若干段,有两种合法的段 1.段长为 $1$,代价为 $a$ 2.这个段是前面所有段拼起来组成的字符串的字串,代价为 $b$ 问最小代价 $|s| \leq 5000$ ...

  9. SQL夯实基础(二):连接操作中使用on与where筛选的差异

    一.on筛选和where筛选 在连接查询语法中,另人迷惑首当其冲的就要属on筛选和where筛选的区别了,如果在我们编写查询的时候, 筛选条件的放置不管是在on后面还是where后面, 查出来的结果总 ...

  10. Oracle中查询前10条记录

    在Oracle怎样查询表中的top10条记录呢? select * from test where rownum <=10     ----说明:rownum只能用于<或<=运算,如 ...