记录一次手机联系人整理(XML文件格式处理)
场景: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文件格式处理)的更多相关文章
- Android-AsyncTask异步任务(获取手机联系人)
本篇随笔将讲解一下Android的多线程的知识,以及如何通过AsyncTask机制来实现线程之间的通信. 一.Android当中的多线程 在Android当中,当一个应用程序的组件启动的时候,并且没有 ...
- android131 360 05 手势触摸滑动,sim卡,开机启动的广播,手机联系人,SharedPreferences,拦截短信
安卓手势触摸滑动: package com.itheima52.mobilesafe.activity; import android.app.Activity; import android.con ...
- android利用ContentResolver访问者获取手机联系人信息
转载自:http://www.jb51.net/article/106379.htm 首先需要在AndroidManifest.xml文件中添加权限: <uses-permission andr ...
- Android 读取手机联系人、拨号、发送短信及长按菜单的操作
本示例实现了读取手机联系人,拨号.发送短信及长按出现菜单选项的操作↓ 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下↓ a, main.xml 程序运行的主界面,主要 ...
- Entity framewok 如何实现多条记录作为一条取出, for xml path如何实现
http://www.myexception.cn/linq/1288046.html Entity framewok 怎么实现多条记录作为一条取出, for xml path怎么实现News表:ID ...
- xml文件格式例如以下
xml文件格式例如以下: <?xml version="1.0" encoding="utf-8"?> <us ...
- 手势识别=读取手机联系人=ContentResolver-Day3
手势识别=读取手机联系人=ContentResolverDay32 mobile3.0 手机设置向导页面完成 选择器没有做完成 样式提取完成 自定义控件的优化继续 抽取父类Activity 完成 手机 ...
- Expo大作战(三十九)--expo sdk api之 DocumentPicker,Contacts(获取手机联系人信息),Branch
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- cve-2010-3333 Microsoft Office Open XML文件格式转换器栈缓冲区溢出漏洞 分析
用的是泉哥的POC来调的这个漏洞 0x0 漏洞调试 Microsoft Office Open XML文件格式转换器栈缓冲区溢出漏洞 Microsoft Office 是微软发布的非常流行的办公 ...
随机推荐
- js职责链模式
职责链模式(Chain of Responsiblity),使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为 ...
- 利用matplotlib中imshow()函数绘图
matplotlib 是Python最著名的2D绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中.通过简单的绘图 ...
- 【R】数据导入读取read.table函数详解,如何读取不规则的数据(fill=T)
函数 read.table 是读取矩形格子状数据最为便利的方式.因为实际可能遇到的情况比较多,所以预设了一些函数.这些函数调用了 read.table 但改变了它的一些默认参数. 注意,read.t ...
- Prism 文档 第三章 管理组件之间的依赖关系
第3章:管理组件之间的依赖关系 基于Prism库的复合应用程 ...
- POJ3468 splay
线段树/树状数组裸题,用splay写 splay也是基本操作pushup pushdown 话说我就是找不到全一点的模板,我自己写又全是bug,导致代码风格一直变来变去= = 关键是建树和区间操作(区 ...
- hive从查询中获取数据插入到表或动态分区
Hive的insert语句能够从查询语句中获取数据,并同时将数据Load到目标表中.现在假定有一个已有数据的表staged_employees(雇员信息全量表),所属国家cnty和所属州st是该表的两 ...
- Handsontable 的数据保存(增删改查+导出excel)
项目用到handsontable 插件 根据官网 API写的handsontable初始化, 数据展示, ajax请求, 参数封装, Controller参数接受 全局容器 var AllData = ...
- C#中的线程(四)高级话题
C#中的线程(四)高级话题 Keywords:C# 线程Source:http://www.albahari.com/threading/Author: Joe AlbahariTranslato ...
- C++ 静态常量
#include<iostream> #include<stdexcept> #include <map> using namespace std; class n ...
- 网页播放rtsp流媒体
解决方法: 1.搭建Red5流媒体服务器(其他还有CRTMPD.NGINX-RTMP.SRS) 2.FFmpeg(其他还有live555)实现监控摄像头的RTSP协议转RTMP协议直播 3.搭建WEB ...