python 文档数据存储
一、csv数据的写入和读取
1、csv写入
python标准库自带csv模块,不用自行安装。
import csv
# 若存在文件,则直接打开csv文件;若不存在,则新建文件
# 若不设置newline='',则每行数据会隔一行空白行
csvfile = open('csv_test.csv','w',newline='')
# 将文件加载到csv对象中
writer = csv.writer(csvfile)
# 写入一行数据
writer.writerow(['姓名','年龄','电话'])
# 多行数据写入
data = {
('小P','18','15787689'),
('小C','22','167527152')
}
writer.writerows(data)
# 关闭csv对象
csvfile.close()
2、csv读取
读取csv文件,读取函数有reader和DictReader,两者都是接收一个可迭代的对象,返回一个生成器。reader函数是将一行数据以列表形式返回;DictReader函数返回的是一个字典,字典的值是单元格的值,而字典的键则是这个单元格的标题(列头)。
import csv
csvfile = open('csv_test.csv','r')
# 以列表形式输出
reader = csv.reader(csvfile)
# 以字典形式输出,第一行作为字典的键
#reader = csv.DictReader(csvfile)
rows = [row for row in reader]
print(rows)
上述代码用于获取全部数据,如果要获取某行数据,就可以循环全部数据,再对每行数据做一个判断,判断是否符合筛选条件。
import csv
csvfile = open('csv_test.csv','r')
# 以列表形式输出
reader = csv.reader(csvfile)
for row in reader:
if '小P' in row:
print(row)
二、Excel数据的写入和读取
xlrd支持Excel任何版本的读取,xlwt支持Excel任何版本的写入
xlrd和xlwt的安装
pip install xlrd
pip install xlwt
Excel的写入相对比CSV复杂,Excel可以实现设置数据格式、合并单元格、设置公式和插入图片等功能。使用xlwt实现上述功能的代码如下
import xlwt
# 新建一个Excel文件
wb = xlwt.Workbook()
# 新建一个Sheet
ws = wb.add_sheet('Python', cell_overwrite_ok=True)
# 定义字体对齐方式对象
alignment = xlwt.Alignment()
# 设置水平方式
#HORZ_CENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT,
alignment.horz = xlwt.Alignment.HORZ_CENTER
# 设置垂直方向
alignment.vert = xlwt.Alignment.VERT_CENTER
# 定义格式对象
style = xlwt.XFStyle()
style.alignment = alignment
# 合并单元格write_merge(开始行,结束行,开始列,结束列,内容,格式)
ws.write_merge(0,0,0,5,'Python网络爬虫',style)
# 写入数据wb.write(行,列,内容)
for i in range(2,7):
for k in range(5):
ws.write(i,k,i+k)
# Excel 公式xlwt.Formula
ws.write(i,5,xlwt.Formula('SUM(A'+str(i+1)+':E'+str(i+1)+')'))
# 插入图片,insert_bitmap(img,x,y,x1,y1,scale_x=0.8,scale_y=1)
# 图片格式必须为bmp
# x表示行数,y表示列数
# x1表示相对原来位置向下偏移的像素
# y1表示相对原来位置向右偏移的像素
# scale_x, scale_y缩放比例
#ws.insert_bitmap('C:\\Users\\Administrator\\Desktop\\tu.bmp',9,1,2,2,scale_x=0.3,scale_y=0.3)
# 保持文件
wb.save('file.xls')
把数据写入Excel的整体思路如下
(1)xlwt创建生成临时Excel对象
(2)添加WorkSheets对象
(3)单元格的位置由行列索引决定,索引从0开始
(4)数据写入主要由write_merge和write()实现
(5)设置数据格式是在写入(write_merge和write())的数据中传入参数style
excel的读取
import xlrd
wb = xlrd.open_workbook('file.xls')
# 获取Sheet总数
ws_count = wb.nsheets
print('Sheet总数:',ws_count)
# 通过索引顺序获取Sheets
# ws = wb.sheet()[0]
# ws = wb.sheet_by_index(0)
# 通过Sheets名获取Sheets
ws = wb.sheet_by_name('Python')
# 获取整行的值(以列表返回内容)
row_value = ws.row_values(3)
print('第4行数据: ',row_value)
# 获取整列的值(以列表返回内容)
row_col = ws.col_values(3)
print('D列数据:',row_col)
# 获取所有行列
nrows = ws.nrows
ncols = ws.ncols
print('总行数:',nrows,',总列数:',ncols)
# 获取某个单元格内容cell(行,列)
cell_F3 = ws.cell(2,5).value
print('F3内容:',cell_F3)
# 使用行列索引获取某个单元格内容
row_F3 = ws.row(2)[5].value
col_F3 = ws.col(5)[2].value
三、Word数据写入
Word写入数据的整体思路如下:
(1)创建生成临时Word对象。
(2)分别使用add_paragraph()和add_heading()对Word对象添加标题和正文内容。
(3)如果设置正文内容的字体加粗和斜体等,可以将正文内容p对象的属性runs[0].bold和add_run(‘XX’).italic设置为True。
(4)如果设置插入图片和添加表格,可以在Word对象中使用方法add_picture()和add_table()。
(5)完成数据写入,需要将Word对象保存成Word文件。
代码如下:
# 数据写入
from docx import Document
from docx.shared import Inches
# 创建对象
document = Document()
# 添加标题,其中'0'代表标题类型,共四种类型,具体可在Word的'开始'-'样式'中查看
document.add_heading('Python 爬虫', 0)
# 添加正文内容并设置部分内容格式
p = document.add_paragraph('Python 爬虫开发-')
# 设置内容加粗
p.runs[0].bold = True
# 添加内容并加粗
p.add_run('数据存储-').bold = True
# 添加内容
p.add_run('Word-')
# 添加内容并设置字体斜体
p.add_run('存储实例。').italic = True
# 添加正文,设置'样式'-'明显引用'
document.add_paragraph('样式-明显引用', style='IntenseQuote')
# 添加正文,设置'项目符号'
document.add_paragraph(
'项目符号1', style='ListBullet'
)
document.add_paragraph(
'项目符号2', style='ListNumber'
)
# 添加图片
document.add_picture('test.png', width=Inches(1.25))
# 添加表格
table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for item in range(2):
row_cells = table.add_row().cells
row_cells[0].text = 'a'
row_cells[1].text = 'b'
row_cells[2].text = 'c'
# 保存文件
document.add_page_break()
document.save('test.docx')
Word数据读取
读取Word数据的整体思路如下:
(1)生成Word对象,并指向Word文件。
(2)使用paragraphs()获取Word对象全部内容。
(3)循环paragraphs对象,获取每行数据并写入列表。
(4)将列表转为字符串,每个列表元素使用换行符连接,转换后数据的段落布局与Word文档相似。
代码如下:
# 数据读取
import docx
def readDocx(docName):
fullText = []
doc = docx.Document(docName)
# 读取全部内容
paras = doc.paragraphs
# 将每行数据存入列表
for p in paras:
fullText.append(p.text)
# 将列表数据转换成字符串
return '\n'.join(fullText)
print(readDocx('test.docx'))