Python 导入通讯录:将.csv文件转换为.vcf文件

Python 将.csv文件转换为.vcf文件

你好啊,在代码世界遨游的朋友们。应家里工作需要导入大量联系方式,就要我一个学习软件工程的弱鸡来帮忙,于是在弱鸡4小时的拼命查代码中,终于搞定了人生中第一个真实使用到的程序代码。所以我迫不及待的来我的知识源泉中写下了这个文章,因为我觉得这里写的文章太过于。。分散吧(不知道用啥词),我查了不知道多少个文章然后结合结合才搞定这一个只有几十行代码的东西,所以我想自己也写一个,一会别的萌新看到了也会一目了然,嘻嘻…

清洗数据

Excel数据
当我拿到我家里给我的数据时是一个Excel表格,里面有各种各样的数据,数据之中还有超链接,非常的“脏”,所以我们要进行清洗一下。因为我们导入手机通讯录的话,需要的只是文本文件,于是我将需要的数据复制到一个新的文本文档中,这样可以直接消除Excel中附加的超链接。(这里应该可以用代码解决的,但是我不会。。。原谅我还是个小菜鸡)
txt

这时我们将原来的Excel清空,放入文本文档中的数据(复制粘贴即可),然后点击另存为.csv文件。接下来就可以交给我们的大python了:

import os
file='------------输入你要读取的csv文件的路径(我用的是绝对路径)-----------------'
def file_path_shortname_extension(file):
    #返回文件拓展名.csv 等
    (filepath,temp_filename) = os.path.split(file)
    (shortname,extension) = os.path.splitext(temp_filename)
    return (filepath,shortname,extension)
    
def cv(file):
    if not os.path.isfile(file) :
        print("文件不存在")
    else:
        a = file_path_shortname_extension(file)[2]
        if a == ".csv" :
            print("此文件为csv文件")
            csv2vcf(file)
            print("已生成vcf文件")
        elif a == ".vcf":
            print ("此文件为vcf文件")
            # vcf2csv(file)
            print("已生成csv文件")
        else :
            print("请选择正确的csv文件或者vsf文件")
def csv2vcf(file):
    rf = open(file,encoding="gbk",mode = "r").read().split("\n")
    name = file_path_shortname_extension(file)
    with open(name[0]+name[1]+".vcf", "w", encoding="utf-8") as wf:
        content = ["BEGIN:VCARD", "VERSION:3.0","","","","END:VCARD\n\n", ]
        for line in rf:
            title = line.split("\t")
            if title[0] == "name":continue
            if title[0] == "":break
            if title[1] == "":break
            if not title[0] == "": 
                content[2] = "N;CHARSET=UTF-8:"+title[0]
                content[3] = "FN;CHARSET=UTF-8:" + title[0]
            if not title[1] == "": content[4] = "TEL;TYPE=CELL:" + title[1]
            str="\n".join(content)
            wf.write(str)
            content = ["BEGIN:VCARD", "VERSION:3.0","","","","END:VCARD\n\n", ]
    print("写入完成")
if __name__ == "__main__":
    cv(file)

中途我遇到过的问题:
1、 在Excel另存为csv文件时,遇到了读取文件编码错误的问题,我尝试了gbk、UTF-8、GB2312,等编码,在open.read()时候都输出了乱码(我现在也不知道为啥),通过将该csv文件用文本文档打开后,在将txt文本文档中的数据覆盖进去,用gbk编码就成功了。(前提是你在txt文本文档中保存的编码是UTF-8,在文本文档另存为中可以选择编码格式)
如果编译报错,显示编码格式问题,你可以在open函数中加入errors='ignore',这样就算是乱码他也会照样输出,可以更直观的找错。
2、在进行数据分割的时候,要先通过open.read()来输出,观察输出数据的格式规律,再进行分割。切记:不可以直接死套用代码,不然报了错也不知道为什么。
今天先写这么多吧,要感谢这几个教会我的文章:
.vcf文件的基本架构
csv生成vcf
各位遇到什么问题可以私信问我哦,我看到了就会帮忙想想的,需要帮忙写小代码的也可以滴滴我呀,嘻嘻

猜你喜欢

转载自blog.csdn.net/komed/article/details/105299826