周报3

二进制文件序列化
l 所谓序列化,简单地说就是把内存中的数据在不丢失
其类型信息的情况下转成对象的二进制形式的过程,
对象序列化后的数据经过正确的反序列化过程应该能
够准确无误地恢复为原来的对象
l Python中常用的序列化模块有json、xml、struct、
pickle、marshal、shelve等
l xml是实现不同语言或程序之间进行数据交换的协议
l json可用于字符串等与python数据类型之间的序列化与反序
列化操作,相较于xml,json可以存储Javascript复合对象
l pickle可用于python特有类型与python数据类型之间的序列
化与反序列化,相较于json,pickle要求操作二进制文件
l struct用于实现二进制的Python数据根据格式符与字符串进
行转换
l marshal不是通用的模块,它是不被推荐使用的模块,因为
使用marshal序列化的二进制数据格式还没有文档化,在不
同版本的Python中,marshal的实现可能不一样
l shelve解决了json、pickle只保留最新的dump数据的问题,
像字典一样通过key访问
文本文件与二进制文件2
26
6
使用json模块读写文本文件
05P26.py】
l import json
l x=[1,2,3,4]
l print(type(x))
l fp = open('sample.txt', 'w') #打开文件
l json.dump(x,fp)
#json序列化
l fp.close()
l fp = open('sample.txt', 'r')
#打开文件
l x=json.load(fp)
#json反序列化
l fp.close()
l print(type(x))
l print(x)
文本文件与二进制文件
输出结果:
<class 'list'>
<class 'list'>
[1, 2, 3, 4]2
27
7
使用pickle模块写/读二进制文件
05P27.py】
l import pickle
l i = 13000000
l a = 99.056
l s = '中国人民123abc'
l lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
l tu = (-5, 10, 8)
l coll = {4, 5, 6}
l dic = {'a':'apple', 'b':'banana', 'g':'grape', 'o':'orange'}
l data = [i, a, s, lst, tu, coll, dic]
l with open('sample_pic
kle
.d
at'
, 'w
b') as f: #写文件
l try:
l pickle.dump(len(d
a
t
a
)
, f
) #表示后面将要写入的数据个数
l for item in data:
l pickle.dump(i
tem
,
f)
l except:
l print('写文件异常
!
') #如果写文件异常则跳到此处执行
l with open('sample_pick
le
.da
t'
, 'rb') as f: #读文件
l n = pickle.load(f) #
l for i in range(n):
l
x
=
pic
kl
e.load(f)
l print(x)
文本文件与
1
30
0
0
00
0
99
.0
5
6
1
2
3
a
b
c
[
[1
, 2
, 3
], [
4
,
5
,
6
], [7, 8, 9]]
(-5
, 10, 8)
{4
, 5,
6
}
{'a': 'apple
',
'b'
: 'b
an
an
a',
'g'
: 'g
ra
pe', 'o': 'orange'}2
8
2
8
使用shelve模块操作二进制文件
05P28.py】
l >>> import shelve #导入shelve模块
l >>> fp = shelve.open('shelve_test.dat') #创建或打开二进制文
l >>> zhangsan = {'age':38, 'sex':'Male', 'address':'SDIBT'}
l >>> fp['zhangsan'] = zhangsan #写入文件内容
l >>> fp.close() #关闭文件
l >>> fp = shelve.open('shelve_test.dat')
l >>> lisi = {'age':40, 'sex':'Male', 'qq':'1234567', 'tel':'7654321'}
l >>> fp['lisi'] = lisi #写入文件内容
l >>> fp.close() #关闭文件
l >>> fp = shelve.open('shelve_test.dat')
l >>> print(fp['zhangsan']['age']) #查看文件内容
l 38
l >>> print(fp['lisi']['qq'])
l 1234567
l >>> fp.close()
文本文件与二进制文件2
29
9
Office文件操作
l 应用扩展库pywin32中win32com模块操作Office文档,
通过VBA实现,可操作doc文件
l 应用扩展库xlwt(全新写)、 xlrd(读)、xlutils(读写)操
作excel文件,旧版不支持xlsx文件
l 使用扩展库openpyxl读写Excel 2007及更高版本的
Excel文件(xlsx文件)
l 应用扩展库python-docx读写Word 2007及更高版本的
word文件(docx文件)
Office文件操作3
0
30
win32com模块操作word文件
05P30.py】
l import os
l from win32com.client import Dispatch
l wordApp = Dispatch('word.Application')
l wordApp.Visible = True
l myDoc = wordApp.Documents.Add()
l myRange = myDoc.Range(0,0)
l myRange.InsertBefore('hello python word doc!')
l print(os.getcwd())
l myDoc.SaveAs(os.getcwd()+ '\\python_word_demo.docx')
l myDoc.Close()
l wordApp.Quit()
l del wordApp
Office文件操作3
1
3
1
win32com模块操作Excel文件
05P31.py】
l import os
l from win32com.client import Dispatch
l xlApp = Dispatch('Excel.Application')#打开EXCEL程序
l xlBook = xlApp.Workbooks.Add() #新建xls文件
l ##xlBook = xlApp.Workbooks.Open(
'python_excel_demo.xlsx')
#打开Excel文件
l xlSht = xlBook.Worksheets('sheet1') #打开worksheet
l aaa = xlSht.Cells(1, 2).Value
#访问单元格的内容
l xlSht.Cells(2, 3).Value = "liulijia" #设置单元格的内容
l xlBook.SaveAs(os.getcwd()+ '\\python_excel_demo.xlsx')
l xlBook.Close(SaveChanges=1)
l xlApp.Quit()
l del xlApp
Office文件操作3
2
3
2
模块xlwt写入/xlrd读取Excel文件
05P32.py】
l from xlwt import *
#xlwt写入Excel文件
l book = Workbook()
#创建新的Excel文件
l sheet1 = book.add_sheet("First")
#添加新的worksheet
l al = Alignment()
l al.horz = Alignment.HORZ_CENTER#对齐方式
l al.vert = Alignment.VERT_CENTER
l borders = Borders()
l borders.bottom = Borders.THICK
#边框样式
l style = XFStyle()
l style.alignment = al
l Style.borders = borders
l row0 = sheet1.row(0)
#获取第0行
l row0.write(0, 'test', style=style) #写入单元格
l book.save(r'D:\test.xls')
#保存文件
l import xlrd
#xlrd读取Excel文件
l book = xlrd.open_workbook(r'D:\test.xls') #打开Excel文件
l sheet1 = book.sheet_by_name('First')
#打开worksheet
l row0 = sheet1.row(0)
#获取第0行
l print(row0[0])
#查看该行第0个单元格信息
l
pri
nt(
row0[0].value)
#查看单元格中的内容
Office文件
作33
3
3
扩展库openpyxl读写Excel2007及更
高版本的Excel文件【
05P33.py】
l import openpyxl
l from openpyxl import Workbook
l fn = r‘d:\test.xlsx'
#文件名
l wb = Workbook()
#创建工作簿
l ws = wb.create_sheet(title='你好,世界')
#创建工作表
l ws['A1'] = '这是第一个单元格'
#单元格赋值
l ws['B1'] = 3.1415926
l wb.save(fn)
#保存Excel文件
l wb = openpyxl.load_workbook(fn) #打开已有的Excel文件
l ws = wb.worksheets[1]
#打开指定索引的工作表
l print(ws['A1'].value)
#读取并输出指定单元格的值
l ws.append([1,2,3,4,5])
#添加一行数据
l ws.merge_cells('F2:F3')
#合并单元格
l ws['F2'] = "=sum(A2:E2)" #写入公式
l for r in range(10,15):
l for c in range(3,8):
l _ = ws.cell(row=r, column=c, value=r*c)#写入单元格数据
l
wb
.sa
ve(fn)
Office文件
作3
34
4
python-docx提取docx文档中插图和
表格清单【
05P34.py】
l from docx import Document
l import re
l result = {'fig':[], 'tab':[]}
l doc = Document(r'd:\lunwen.docx')
l for p in doc.paragraphs:
#遍历文档所有段落
l t = p.text
#获取每一段的文本
l if re.match('图\d+-\d+ ', t):
#插图
l result['fig'].append(t)
l elif re.match('表\d+-\d+ ', t):
#表格
l result['tab'].append(t)
l for key in result.keys():
#输出结果
l print('='*30)
l for value in result[key]:
l print(value)
Office文件操作
posted @ 2022-03-20 17:44  我的未来姓栗山  阅读(21)  评论(0编辑  收藏  举报