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

最近遇到一个问题

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

  • 如何将csv导入到通讯录

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

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

import os
import re
import quopri
def csv2vcf(csv_filename, encoding='utf-8'):
    """csv格式文件转换为vcf格式文件"""
    # 1.读取csv文件
    with open(csv_filename, 'r', encoding='utf-8') as f:
        ftext_list = f.readlines()
        f.close()
    # 2.将cvs转换为vcf格式
    vcards = ''
    for line in ftext_list[1:]:
        tel_numbers = ''
        name_tel_list = line.strip().split(',')
        if name_tel_list[0]:
            tel_name = name_tel_list[0]  # 姓名
            for tel in name_tel_list[1:]:  # 电话
                tel_numbers += f'TEL;CELL:{tel}\n'
            vcard = f'BEGIN:VCARD\nN:{tel_name}\n{tel_numbers}END:VCARD\n'
            vcards += vcard
    # 3.保存转换后的vcf格式文件
    (fpath, temp_fname) = os.path.split(csv_filename)
    (fname, fextension) = os.path.splitext(temp_fname)
    with open(f'{fpath}{fname}.vcf', "w", encoding=encoding) as f:
        try:
            f.write(vcards)
        finally:
            f.close()
def vcf2csv(vcf_filename, encoding="gbk"):
    """vcf格式文件转换为csv格式文件"""
    # 1.读取vcf文件
    with open(vcf_filename, 'r', encoding='utf-8') as f:
        try:
            ftext = f.read()
        finally:
            f.close()
    # 2.正则替换清洗数据
    re_dic = {
        r"(EMAIL;)(.*)(\n)": "",
        r"(ADR;)(.*)(\n)": "",
        r"(ORG;)(.*)(\n)": "",
        r"(NOTE:)(.*)(\n)": "",
        r"(\n)(VERSION:2.1)": "",
        r"\nEND:VCARD\nBEGIN:VCARD": "",
        r"\nEND:VCARD": "",
        r"BEGIN:VCARD\n": "",
        r"(;;;)([\s\S]*?)(TEL;CELL:)": ",",
        r"N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:": "",
        r"(\nTEL;)(.*?)(:)": ",",
        r"N:;": "",
        r";": "",
        r" ": "",
        r"=\n": ""
    }
    for re_rule, replace_str in re_dic.items():
        p1 = re.compile(re_rule)
        ftext = p1.sub(replace_str, ftext)
    # 3.解码quopri编码
    #ftext = quopri.decodestring(ftext).replace(" ", "")
    ftext = "".join([s for s in ftext.splitlines(True) if s.strip()])
    # 4.保存cvs文件
    csv_str = f'姓名,手机\n{ftext}'
    (fpath, temp_fname) = os.path.split(vcf_filename)
    (fname, fextension) = os.path.splitext(temp_fname)
    with open(f'{fpath}{fname}.csv', "w", encoding=encoding) as f:
        try:
            f.write(csv_str)
        finally:
            f.close()

将csv转为vcf

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

将vcf转为csv

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

近期文章

漂亮~pandas可以无缝衔接Bokeh

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

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

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

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

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

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

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

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

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

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

jupyter notebook代码获取方式,公众号后台回复关键词“20200314” 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值