打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用Python处理手机通讯录导入与导出文件

最近遇到一个问题

  • 如何将通讯录信息导出到csv

  • 如何将csv导入到通讯录

网上大多都是在说使用Vcard文件,这种文件是手机自带通讯录app能识别的文件格式。

但是试了网上各种服务,废了很大的劲头儿也没将csv转为vcf格式(Vcard文件)。后来github一搜csv2vcf,还真让我找到代码。直接封装成函数,各位回去直接调用即可。

  1. import os

  2. import re

  3. import quopri

  4. def csv2vcf(csv_filename, encoding='utf-8'):

  5. """csv格式文件转换为vcf格式文件"""

  6. # 1.读取csv文件

  7. with open(csv_filename, 'r', encoding='utf-8') as f:

  8. ftext_list = f.readlines()

  9. f.close()

  10. # 2.将cvs转换为vcf格式

  11. vcards = ''

  12. for line in ftext_list[1:]:

  13. tel_numbers = ''

  14. name_tel_list = line.strip().split(',')

  15. if name_tel_list[0]:

  16. tel_name = name_tel_list[0] # 姓名

  17. for tel in name_tel_list[1:]: # 电话

  18. tel_numbers += f'TEL;CELL:{tel}\n'

  19. vcard = f'BEGIN:VCARD\nN:{tel_name}\n{tel_numbers}END:VCARD\n'

  20. vcards += vcard

  21. # 3.保存转换后的vcf格式文件

  22. (fpath, temp_fname) = os.path.split(csv_filename)

  23. (fname, fextension) = os.path.splitext(temp_fname)

  24. with open(f'{fpath}{fname}.vcf', "w", encoding=encoding) as f:

  25. try:

  26. f.write(vcards)

  27. finally:

  28. f.close()

  29. def vcf2csv(vcf_filename, encoding="gbk"):

  30. """vcf格式文件转换为csv格式文件"""

  31. # 1.读取vcf文件

  32. with open(vcf_filename, 'r', encoding='utf-8') as f:

  33. try:

  34. ftext = f.read()

  35. finally:

  36. f.close()

  37. # 2.正则替换清洗数据

  38. re_dic = {

  39. r"(EMAIL;)(.*)(\n)": "",

  40. r"(ADR;)(.*)(\n)": "",

  41. r"(ORG;)(.*)(\n)": "",

  42. r"(NOTE:)(.*)(\n)": "",

  43. r"(\n)(VERSION:2.1)": "",

  44. r"\nEND:VCARD\nBEGIN:VCARD": "",

  45. r"\nEND:VCARD": "",

  46. r"BEGIN:VCARD\n": "",

  47. r"(;;;)([\s\S]*?)(TEL;CELL:)": ",",

  48. r"N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:": "",

  49. r"(\nTEL;)(.*?)(:)": ",",

  50. r"N:;": "",

  51. r";": "",

  52. r" ": "",

  53. r"=\n": ""

  54. }

  55. for re_rule, replace_str in re_dic.items():

  56. p1 = re.compile(re_rule)

  57. ftext = p1.sub(replace_str, ftext)

  58. # 3.解码quopri编码

  59. #ftext = quopri.decodestring(ftext).replace(" ", "")

  60. ftext = "".join([s for s in ftext.splitlines(True) if s.strip()])

  61. # 4.保存cvs文件

  62. csv_str = f'姓名,手机\n{ftext}'

  63. (fpath, temp_fname) = os.path.split(vcf_filename)

  64. (fname, fextension) = os.path.splitext(temp_fname)

  65. with open(f'{fpath}{fname}.csv', "w", encoding=encoding) as f:

  66. try:

  67. f.write(csv_str)

  68. finally:

  69. f.close()

将csv转为vcf

  1. csv2vcf(csv_filename='通讯录.csv')

将vcf转为csv

  1. vcf2csv(vcf_filename='通讯录.vcf')

近期文章





漂亮~pandas可以无缝衔接Bokeh

综述:文本分析在市场营销研究中的应用

Lazy Prices公司年报内容变动碰上股价偷懒

用python帮你生产指定内容的word文档

2020年B站跨年晚会弹幕内容分析

YelpDaset: 酒店管理类数据集10+G

NRC词语情绪词典和词语色彩词典

Loughran&McDonald金融文本情感分析库

股评师分析报告文本情感分析预测股价

使用分析师报告中含有的情感信息预测上市公司股价变动

代码不到40行的超燃动态排序图

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
excel表格怎么转换vcf通讯录格式
.net平台手机管理软件开发(7)——IrMC简介_打造专业的黑客网站,黑客论坛,黑客门户
iOS开发生成/解析.vcf文件vCard解析<div></div>
多种方法将诺基亚塞班S60V3/V5联系人同步到Android
批处理如何提取文本里两个指定字符串/关键字之间的内容
Python3批量转换文本文件编码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服