Python之文档数据存储

简介: 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')

image.png

写入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')

image.png

在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文档相似

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

相关文章
|
1月前
|
数据采集 Python
Python实用记录(七):通过retinaface对CASIA-WebFace人脸数据集进行清洗,并把错误图路径放入txt文档
使用RetinaFace模型对CASIA-WebFace人脸数据集进行清洗,并将无法检测到人脸的图片路径记录到txt文档中。
40 1
|
1月前
|
Python
Python实用记录(六):如何打开txt文档并删除指定绝对路径下图片
这篇文章介绍了如何使用Python打开txt文档,删除文档中指定路径的图片,并提供了一段示例代码来展示这一过程。
28 1
|
1月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
50 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
1月前
|
计算机视觉 Python
Python实用记录(九):将不同的图绘制在一起、将不同txt文档中的数据绘制多条折线图
这篇文章介绍了如何使用Python的OpenCV库将多张图片合并为一张图片显示,以及如何使用matplotlib库从不同txt文档中读取数据并绘制多条折线图。
42 3
Python实用记录(九):将不同的图绘制在一起、将不同txt文档中的数据绘制多条折线图
|
1月前
|
人工智能 开发者 Python
python读取word文档 | AI应用开发
在RAG系统中,构建知识库时需读取多种外部文档,其中Word文档较为常见。本文介绍如何使用`python-docx`库读取Word文档(.docx格式)中的标题、段落、表格和图片等内容。首先通过`pip install python-docx`安装库,然后利用提供的接口提取所需信息。尽管该库功能强大,但在识别标题样式时需自定义逻辑,并且仅提供图片的URI而非直接加载。示例代码展示了读取文本、识别标题、读取表格及获取图片URI的方法。【10月更文挑战第2天】
75 2
|
1月前
|
IDE 开发工具 Python
Python自动化操作word--批量替换word文档中的文字
Python自动化操作word--批量替换word文档中的文字
|
3月前
|
JSON 测试技术 API
Python开发解析Swagger文档小工具
文章介绍了如何使用Python开发一个解析Swagger文档的小工具,该工具可以生成符合httprunner测试框架的json/yaml测试用例,同时还能输出Excel文件,以方便测试人员根据不同需求使用。文章提供了详细的开发步骤、环境配置和使用示例,并鼓励读者为该开源项目贡献代码和建议。
77 1
Python开发解析Swagger文档小工具
|
3月前
|
搜索推荐 前端开发 数据可视化
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
本文介绍了一个基于Python协同过滤算法的旅游景点推荐系统,该系统采用Django框架、MySQL数据库、Bootstrap前端和echarts数据可视化技术,旨在为用户提供个性化的旅游推荐服务,提升用户体验和旅游市场增长。
284 9
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
|
3月前
|
IDE API 开发工具
|
4月前
|
Shell 程序员 开发工具
[oeasy]python0026_调试程序_pdb3_帮助_help_求助_文档
调试程序_debug_next_下一步_list_pdb3 🥋
47 1