ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python之文档数据存储

2022-01-18 23:58:50  阅读:177  来源: 互联网

标签:存储 Word Python Excel 写入 文档 csv 数据 row


写入和读取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文档相似

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

标签:存储,Word,Python,Excel,写入,文档,csv,数据,row
来源: https://blog.csdn.net/weixin_41905135/article/details/122571416

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有