python的特殊文件操作——excel、PDF、word、json、csv

本文所记述的是一些基础知识点中平时用的比较少的方法。对于常见的一些文件格式,python几乎都有相关的库来进行操作。

一、 excel和csv

首先阐述下个人观点,对excel和csv文件的操作首推pandas,不过pandas主要侧重于数据的处理,如果想进行其他操作可以查看以下两个模块:

使用openpyxl模块可以对excel文件进行一些精细化操作,比如格式、样式、公式、图标等都可以使用python来处理。只不过excel本身也可以使用VBA编程,如何取舍还要视情而定。

使用csv模块的reader和writer方法可以像操作普通文本文件一样读写csv文件,其中涉及一些参数,可以对csv文件的数据进行精细化的操作。使用csv.reader()读取的数据为多维的列表。

二、PDF

PDF是二进制文件,处理起来要比普通文本复杂,但是PDF在日常工作中的使用频率越来越高,还是值得关注。python中有一个专门用来操作PDF的库:PyPDF2。

1.基本的PDF读取

下面这段代码展示了基本的PDF读取流程,其输出的结果就是第一页的内容。

>>> import PyPDF2
>>> pdfFileObj = open(file, 'rb')
>>> pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
>>> pdfReader.numPages  # 输出文档的页数
>>> pageObj = pdfReader.getPage(0)  
>>> pageObj.extractText()  # 输出文档的内容

在这个过程中,首先将pdf打开、读入,然后取得指定的page对象,才能通过extractText()方法获取文本内容。

2.加密PDF的读取

有些pdf是经过加密的,可以通过pdfReader.isEncrypted属性判断文档是否通过加密,如果经过加密则输出结果为True。可以使用pdfReader.decrypt('密码')方法进行解密,返回“1”表示解密成功,可以正常获取page对象及其后的操作。

>>> import PyPDF2
>>> pdfReader = PyPDF2.PdfFileReader(open('encrypted.pdf', 'rb'))
>>> pdfReader.isEncrypted
# 输出:True
>>> pdfReader.decrypt('rosebud')
# 输出:1

需要注意的是,这种方式的解密是临时性的,硬盘中的文件仍然是加密后的文件。

3.PDF的写入

在 PyPDF2 中,与 PdfFileReader 对象相对的是 PdfFileWriter 对象,它可以创建一个新的 PDF 文件。但 PyPDF2 不能将任意文本写入 PDF,PyPDF2 写入 PDF 的能力,仅限于从其他 PDF 中拷贝页面、旋转页面、重叠页面和加密文件。其一般流程如下:

  • 1.打开一个或多个已有的 PDF(源 PDF),得到 PdfFileReader 对象。
  • 2.创建一个新的 PdfFileWriter 对象。
  • 3.将页面从 PdfFileReader 对象拷贝到 PdfFileWriter 对象中。
  • 4.最后,利用 PdfFileWriter 对象写入输出的 PDF。

具体方法这里不进行详述,需要时可查阅相关资料。

三、word

创建和修改word文档,可以使用 python-docx 模块。关于word文档的数据特性,在《python编程快速上手》这本书中讲的很好,我这里直接截图:


1553504381716.png

注:关于docx模块是否只能操作.docx文件而不能操作.doc文件这一点还有待核实。

1.docx文件的读取

使用docx模块可以接受一个.docx文件,获取其中的全部文本字符:

import docx
def getText(filename):
    doc = docx.Document(filename)
    fullText = []
    for para in doc.paragraphs:
        fullText.append(para.text)
    return '\n'.join(fullText)

当然,也可以分段提取paragraphs和runs的数据,例如:

>>> import docx
>>> doc = docx.Document('demo.docx')
>>> len(doc.paragraphs)
7
>>> doc.paragraphs[0].text
'Document Title'
>>> doc.paragraphs[1].text
'A plain paragraph with some bold and some italic'
>>> len(doc.paragraphs[1].runs)
4
>>> doc.paragraphs[1].runs[0].text
'A plain paragraph with some '
>>> doc.paragraphs[1].runs[1].text
'bold'
>>> doc.paragraphs[1].runs[2].text
' and some '
>>> doc.paragraphs[1].runs[3].text
'italic'

2.docx文件的写入

要进行word文档的写入,首先要注意设置paragraphs和runs的样式,然后创建一个新的、空白的 Word
Document 对象,再将新文本写入到Document中。另外,还可以向文档中添加标题、换行符换页符、图片等。(详细内容暂略)

总之,由于word中的内容不是单纯的字符串,而是带有特定的格式和属性,因此操作起来相对复杂一些。

四、json

json是一种非常流行的数据格式,MongoDB的数据就是json格式存储的。python对json文件的操作依赖于json模块。

1.json文件的读取

使用json.loads()方法可以将json格式的文件转换为python能够识别的数据(dict)。例如:

>>> stringOfJsonData = '{"name": "Zophie", "isCat": true, "miceCaught": 0,
"felineIQ": null}'
>>> import json
>>> jsonDataAsPythonValue = json.loads(stringOfJsonData)
>>> jsonDataAsPythonValue
{'isCat': True, 'miceCaught': 0, 'name': 'Zophie', 'felineIQ': None}

2.json文件的写入

与loads()方法相对应,使用json.dumps()可以将python数据转换为json数据。例如:

>>> pythonValue = {'isCat': True, 'miceCaught': 0, 'name': 'Zophie',
'felineIQ': None}
>>> import json
>>> stringOfJsonData = json.dumps(pythonValue)
>>> stringOfJsonData
'{"isCat": true, "felineIQ": null, "miceCaught": 0, "name": "Zophie" }'
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容

  • 第一部分 创建爬虫 重点介绍网络数据采集的基本原理 : 如何用 Python 从网络服务器 请求信息,如何对服务器...
    万事皆成阅读 2,030评论 0 5
  • 常用库: fuzzywuzzy,字符串模糊匹配。 esmre,正则表达式的加速器。 Chardet字符编码探测器,...
    AlastairYuan阅读 2,262评论 0 43
  • 有人常出狠恶言 有人长长忍心寒 无人不知心比心 无人不晓敬要先 寸草因暖而得生 人家无暖人难存 人道谁无君子念 共...
    怀古的弄潮儿阅读 332评论 0 2
  • SX YY语音客户端在win10中使用无法在任务栏显示托盘图标,但打开2次yy时又可以显示一个,真垃圾。 解决办法...
    Roceys阅读 1,990评论 0 2
  • “这是一个手电筒引发的误会!你懂吗?这就是一个误会!我没有让你来地球救我!我在这里安居乐业,生活的虽然有点不思进取...
    小天黑阅读 765评论 0 0