Python之文档数据存储

2022/1/19 1:04:23

本文主要是介绍Python之文档数据存储,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

写入和读取CSV、Excel和Word中的数据是编写爬虫程序的重要内容,现将学习爬虫涉及到的文档数据存储知识整理出来与大家分享。

Python之文档数据存储


CSV数据的写入和读取

​ 常用的数据存储介质有文件、关系型数据库和非关系型数据库。文本文档存储适用于具有时效性的数据,如股市行情、商品信息和排行榜信息等,这类数据具有动态变化性质,非特殊要求下,建议存放文件。Python标准库自带CSV模块,不用自行安装。

数据写入CSV

代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :1/18/22 7:08 PM
# 文件      :CSV数据的写入和读取.py
# IDE      :PyCharm

import csv
# 若存在文件,则打开csv文件,若不存在,则新建文件
# 若不设置newline='',则每行数据会隔一行空白行
csvfile = open('csv_test.csv', 'w', newline='')

# 将文件加载到csv对象中
writer = csv.writer(csvfile)

# 写入一行数据
writer.writerow(['姓名', '年龄', '电话'])

# 多行数据写入
data = [
    ('小P', '18', '13134343222'),
    ('小Y', '22', '138001380000')
]
writer.writerows(data)

# 关闭csv对象
csvfile.close()

writerow和writerows对应单行写入和多行写入

读取全部数据

代码如下:

# 获取全部数据
#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :1/18/22 7:19 PM
# 文件      :读取csv.py
# IDE      :PyCharm

import csv
csvfile = open('csv_test.csv', 'r')

# 以列表形式输出
reader = csv.reader(csvfile)

# 以字典形式输出,第一行作为字典的键
# reader = csv.DictReader(csvfile)
rows = [row for row in reader]
print(rows)

读取某行数据

可以循环全部数据,再对每行数据做一个判断,判断是否符合筛选条件,代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :1/18/22 7:26 PM
# 文件      :读取某一行数据.py
# IDE      :PyCharm

import csv

csvfile = open('csv_test.csv', 'r')

reader = csv.reader(csvfile)

# 获取某一行数据
for row in reader:
    if '小Y' in row:
        print(row)

小结:CSV的存储相对简单而且实用性比较强


Excel数据的写入和读取

​ Python操作的Excel库有xldd、xlwt、pyExcelerator 和openpyxl。其中,pyExcelerator只支持2003版本,openpyxl只支持2007版本,xlrd支持Excel任何版本的读取,xlwt支持Excel任何版本的写入。

# xlrd和xlwt的安装
pip install xlrd
pip install xlwt

Excel的写入

相对比CVS复杂,Excel可以实现设置数据格式、合并单元格、设置公式和插入图片等功能。使用xlwt实现上述功能,代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :1/18/22 7:32 PM
# 文件      :xlwt-写数据.py
# IDE      :PyCharm

import xlwt
# 新建一个Excel 文件
wb = xlwt.Workbook()

# 新建一个sheet
ws = wb.add_sheet('Python', cell_overwrite_ok=True)

# 定义字体对齐方式对象
alignment = xlwt.Alignment()

# 设置水平方向
# HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED
# HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED
alignment.horz = xlwt.Alignment.HORZ_CENTER

# 设置垂直方向
# VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED
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('/Users/liuxiaowei/PycharmProjects/爬虫练习/文档数据存储/Excel数据/test.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数据

由xlrd模块实现,以上述代码生成的Excel文件为读取目标,代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :1/18/22 10:30 PM
# 文件      :xlrd-读取数据.py
# IDE      :PyCharm

# xlrd:excel read

import xlrd
wb = xlrd.open_workbook('file.xls')

# 获取Sheets总数
ws_count = wb.nsheets
print('Sheets总数: ', ws_count)

# 通过索引顺序获取Sheets
# ws = wb.sheets()[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
print('F3内容: ', row_F3, 'F3内容:', col_F3)

读取Excel的数据思路:

如下:

(1)xlrd 生成Workbook对象,并指向Excel文件

(2)选择Workbook里某个WorkSheets对象

(3)获取WorkSheets里数据已占用的总行数和总列数(某个单元格数据)

(4)循环总行数和总列数,读取每一个单元格数据

注意:当我们使用xlrd模块读取Excel的时候,如果Excel的数据内容中添加了图片信息,那么xlrd模块将无法读取Excel的数据内容


Word数据的写入和读取

将数据存储在Word文档中,一般以文章、新闻报道和小说这类文字内容较长的数据为主。Python读写Word需要第三方库扩展支持,使用pip安装:

pip install python-docx

Word数据写入

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :1/18/22 11:18 PM
# 文件      :写入数据.py
# IDE      :PyCharm

# 数据写入
from docx import Document
from docx.shared import Inches

# 创建对象
document = Document()

# 添加标题,其中"0"代表标题类型,共有4种类型,具体可在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(
    '项目符号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中写入数据的整体思路

如下:

(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文件

Word数据读取

代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :1/18/22 11:43 PM
# 文件      :读取数据.py
# IDE      :PyCharm

# 数据读取
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'))

在Word中读取数据的整体思路

如下:

(1)生成Word对象,并指向Word文件

(2)使用paragraphs()获取Word对象全部内容

(3)循环paragraphs对象,获取每行数据并写入列表

(4)将列表转成字符串,每个列表元素使用换行符连接,转换后数据的段落布局与Word文档相似

希望此文对您有所帮助和启发。欢迎关注,点赞和转发。



这篇关于Python之文档数据存储的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程