来源

整理大量通讯录时,发现从手机上下载的CSV文件不易转成EXCEL文件(QQ通讯录和百度云盘都试过了,CSV文件过大无法加载),导致整理起来特别麻烦,故试图自己写一个小程序来处理文件。

分析CSV文件

用文本编辑器打开vcf一看,就是文本格式,我只需要把它转换成csv格式,然后就可以导入到Excel中了

BEGIN:VCARD
VERSION:2.1
N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E5=95=8A=6C;;;;
FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E5=95=8A=6C
LATESTDATE:201909011513
COUNTRYISO:TH
OPPO_RECENT_CALL:NULL
TEL;CELL:83834033
X-OPPO-GROUP;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=51=51=E5=90=8C=E6=AD=A5=E5=8A=A9=E6=89=8B=32=30=31=36=31=30=30=31
END:VCARD

从内容看,只需要取"FN:"、"TEL"打头的字段,遇到"END"再开始下一个名片。
由FN观察得知,其编码为QUOTED-PRINTABLE,故可引入quopri模块来解码。

代码

import quopri       #quoted-printable编解码
with open("I:\contacts.vcf", 'r') as rf, open('I:\contacts.txt', 'w',encoding='utf-8') as wf:content = ['', '', '', '']tel = 0not_1_line=0fn=''               #多行姓名for line in rf.readlines():      if line.startswith('FN') or not_1_line:      #姓名   此处存在多行的情况if len(line)>1:if line[-2]=='=': #说明不止1行 not_1_line=1fn+=line[:-2]       #删除最后两位——'=\n'continueelse:               #到底了not_1_line=0fn+=line.strip('\n')line=fnfn=''       #清空pos=line.find(':')  qp_origin= line[pos+1:].strip().encode()      #b'=E5=95=8A=6C'     content[0]=quopri.decodestring(qp_origin).decode('utf-8')elif line.startswith('TEL'):if tel > 2:                 #最多三个电话continuepos = line.find(':')content[tel + 1] = line[pos + 1:].strip()tel = tel + 1elif line.startswith('END'):str = '\t'.join(content) + '\n'      #'gbk' codec can't encode character '\u270c' in position 5: illegal multibyte sequence,存在特殊字符#将编码方式修改为UTF-8——open默认编解码非utf-8if '筛选条件' in str:                #此处添加筛选条件wf.write(str)content = ['', '', '', '']tel = 0

总结

此程序主要难点就是编码的转换。
此外,FN有时会超过两行或者三行,必须要特别考虑,不然会出现无法解码的情况
转换出来的为txt文件,若需要excel文件,直接全选复制便可

错误

'gbk' codec can't encode character '\u270c' in position 5: illegal multibyte sequence
调试中遇到如上错误,经过排查是缘由open默认编码非utf-8,指定一下便好

【PYTHON小项目】VCF文件转EXCEL文件方法详解(附QUOTED-PRINTABLE编解码)相关推荐

  1. python统计csv行数_对Python 多线程统计所有csv文件的行数方法详解

    如下所示: #统计某文件夹下的所有csv文件的行数(多线程) import threading import csv import os class MyThreadLine(threading.Th ...

  2. python修改xml标签的值_对python修改xml文件的节点值方法详解

    这是我的xml文件结构 <?xml version='1.0' encoding='utf-8'?> JPEGImages train_2018-05-08_1000.jpg D:\all ...

  3. python对文件的处理_python文件处理fileinput使用方法详解

    这篇文章主要介绍了python文件处理fileinput使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 fileinput模块 ...

  4. python fileinput_python文件处理fileinput使用方法详解

    这篇文章主要介绍了python文件处理fileinput使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 fileinput模块 ...

  5. python处理excel大数据-Python实现大数据收集至excel的思路详解

    一.在工程目录中新建一个excel文件 二.使用python脚本程序将目标excel文件中的列头写入,本文省略该部分的code展示,可自行网上查询 三.以下code内容为:实现从接口获取到的数据值写入 ...

  6. java spring mvc 上传_Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) 下载文件代码 @RequestMapping("/file/{name.rp}") public Respo ...

  7. java解析日志数据_Java实时监控日志文件并输出的方法详解

    Java实时监控日志文件并输出的方法详解 想在前台显示数据同步过程中产生的日志文件,在网上找到解决方案,做了代码测试好用.这里做个记录 java.io.RandomAccessFile可以解决同时向文 ...

  8. 【文件md5值查看方法详解】:如何获取文件的唯一标识?

    [文件md5值查看方法详解]:如何获取文件的唯一标识? 在日常工作中,我们经常需要检查文件是否被篡改或者验证文件的完整性.而文件的MD5值就是一个很好的选择,因为它可以作为文件的唯一标识.那么,如何获 ...

  9. vue设置html自动跳转路由器,vue2.0项目实现路由跳转的方法详解

    一.安装 1.安装路由vue-router: npm install vue-router vue项目的依赖文件node_modules存在vue-router依赖,说明安装成功 2.vue项目引入v ...

  10. vue ajax highcharts,在vue项目中引入highcharts图表的方法(详解)

    npm进行highchars的导入,导入完成后就可以进行highchars的可视化组件开发了 npm install highcharts --save 1.components目录下新建一个char ...

最新文章

  1. Tensorflow— word2vec
  2. MySQL插入数据时报错Cause: java.sql.SQLException: #HY000的解决方法
  3. Spark:如何替换sc.parallelize(List(item1,item2)).collect().foreach(row={})为并行?
  4. 案例-旋转木马(CSS3)
  5. spark sql 入门详解
  6. PHP下载文件函数封装及下载大文件解决方案
  7. Pitch Innovations音频插件合集
  8. Matlab遗传算法工具箱(gaot)下载及安装
  9. 微软创投加速器最新成果展示:人工智能技术杀入时尚界
  10. Npoi 导出word控制表格水平居中
  11. python str转换成float
  12. 2015出现的25项最佳发明
  13. 安全架构--13--企业资产管理体系建设总结
  14. “Defaulting to user installation because normal site-packages is not writeable“
  15. 俄罗斯互联网的BAT
  16. vscode ssh 远程连接总是循环验证密码
  17. 编程之美之一摞烙饼的排序1
  18. Java猿社区—Http digest authentication 请求代码最全示例
  19. android photoview github,android – 无法解析com.github.chrisbanes:PhotoView:1.3.1
  20. 第四章 缓存查询(一)

热门文章

  1. 用python分析小说_用Python分析《斗破苍穹》
  2. POP和PUSH指令
  3. 一行代码教你如何学会网络测速
  4. ​第3大品牌「鞋王」沦陷,看历史王者的产品史
  5. 智能网联汽车 V2X 系统预警应用功能测试与评价方法
  6. java 项目 预警_java开发中的常见代码黄线预警
  7. (转载)【笨木头Lua专栏】基础补充01:巧说table的几种构造方式
  8. 2021年 我的java面试题
  9. 如何清理占用计算机内存,电脑内存不足怎么清理
  10. 通过tasker上传手机电量到domoticz中,电量过低时,自动充电