使用正则表达式转换手机联系人名单
Jul 5th
今天换了手机,第一件要紧事就是恢复联系人名单。旧手机是HTC c720W,新手机是Nokia 5320XM,其联系人名单格式不一。难道要我一条条输入吗?阿弥陀佛,几百组联系人的信息,手动操作会死人的。
我看了一下以前备份的HTC c720W联系人名单,(说到这里,表扬一下自己:勤于备份真是好习惯,万一某天灾难降临,你还有个指望),发现其格式是这样的:
-
-2147483070
0
SomeBody
1355***9214
***
1899-12-30 00:00:00
1899-12-30 00:00:00
-
...
而诺基亚的通讯录格式是这样的:
"名称","名","中间名","姓","后缀","职务","公司","生日","SIP 地址","一键通","共享视图","用户 ID","备忘","常用手机","常用电话","常用电子邮件","常用传真","常用视频电话","常用网址","常用 VOIP 地址","常用邮政信箱","常用分机","常用街道","常用邮政编码","常用城市","常用省/市/自治区","常用国家/地址","家庭手机","住宅电话","家庭电子邮件","住宅传真","家庭视频电话","家庭网址","家庭 VOIP 地址","家庭邮政信箱","家庭分机","家庭街道","家庭邮政编码","家庭城市","家庭省/市/自治区","家庭国家/地区","公司手机","公司电话","公司电子邮件","公司传真","公司视频电话","公司网址","公司 VOIP 地址","公司邮政信箱","公司分机","公司街道","公司邮政编码","公司城市","公司省/市/自治区","公司国家/地区",""
本想偷懒,去找个xml2csv什么的,不过不太好用。还是请“正则表达式”这个老朋友帮忙吧!
分析xml文件,发现只有
mobiletelephonenumber,businesstelephonenumber,hometelephonenumber,firstname,lastname这5个字段是有用的;对应的csv字段名称是:
“名”,”姓”,”常用手机”,”常用电话”,”公司电话”
其余的字段大可放心删除。
祭出RegexBuddy,写了这样一条正则表达式:
1 2 3 4 5 6 7 8 9 10 | result = re.sub( r"""(?smx)(?#"名","姓","常用手机","常用电话","公司电话") ^\s*<item>.*? <mobiletelephonenumber/?>(?P<mobile>[^\s<]*).*? <businesstelephonenumber/?>(?P<business>[^\s<]*).*? <hometelephonenumber/?>(?P<home>[^\s<]*).*? <firstname/?>(?P<first>[^\s<]*).*? <lastname/?>(?P<lastname>[^\s<]*).*? </item>""", r'"\g<first>","\g<lastname>","\g<mobile>","\g<home>","\g<business>"', subject) |
之所以使用python格式来写正则,是因为它支持命名捕获,看起人直观一些。其实整个替换过程是在RegexBuddy中进行的。
替换后,保存为CSV文件,使用诺基亚自带的软件导入,几百个联系人就又重新归位了。大爽。
使用饭否新版API编写批量抓取饭否消息的程序
Jan 6th
我在断断续续地写一款抓饭程序。预想的功能包括:下载、更新饭否消息,搜索,统计。
近日饭否官方释出搜索功能,可以使用关键字搜索自己曾经发布的消息。作离线版的饭否消息管理工具,似乎没有必要。不过,有的网友习惯将饭否消息列到blog上,因此,我的程序还是有用的。
我原来写的程序,时间都消耗在饭否消息的下载、解析上。好在饭否新版API提供了任意页码的饭否消息,大大简化了抓取难度,因此编写一款饭否消息管理工具不再是一件难事。以python语言为例,我把自己的思路写出来,供各位有类似兴趣的朋友参考。
饭否消息解析之从minidom到xpath
Oct 14th
抛板砖,引白玉:为何不用xpath,什么是xpath?
最近拾起了以前的小项目,在完善上篇文章发布后,“那个谁”的回复让我很感兴趣。他问,“为什么不用xpath?”
xpath是什么东东?我反问。反问之前,当然少不了先google一番,以免……那个啥。
Read the rest of this entry »
饭否消息析取之regex vs xml
Oct 8th
页内导航:
批量导出饭否程序的方法很多,但是基本思路都是先将该网页保存到本地,然后将有用的饭否消息析取出来。本文不讨论如何下载饭否网页了(使用迅雷、wget、curl等),重点讨论对于下载到本地的网页,如何将有用的饭否消息析取出来。

Comments