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编程快速上手》这本书中讲的很好,我这里直接截图:

《python的特殊文件操作——excel、PDF、word、json、csv》 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" }'
    原文作者:奔跑de鳄鱼
    原文地址: https://www.jianshu.com/p/1502787dd57d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞