Python中CSV、Excel、Word文档数据的写入和读取

鳄鱼君

发表文章数:525

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python教程 » Python中CSV、Excel、Word文档数据的写入和读取

常用的数据存储介质有文件、关系式数据库和非关系式数据库。文本文档存储适用于具有时效性的数据,列如一些股市行情、商品信息和排行榜信息等具有动态变化的数据,建议存放文件!

CSV数据的写入和读取

Python标准库自带CSV模块,不需要额外安装。数据写入CSV代码参考:

import csv
# 若存在文件,则打开文件;若不存在,则新建文件
# 若不设置newline='',则每行数据会隔一行空白行
# 编码为ut-8
csvfile=open('csv_text.csv','w',newline='',encoding='utf-8')
# 将文件加载到csv对象中
writer=csv.writer(csvfile)
# 写入一行数据
writer.writerow(['姓名','性别','年龄'])
# 多行数据
data=[
    ('帅哥','女','50'),
    ('美女','男','50')
]
writer.writerows(data)
# 关闭csv对象
csvfile.close()

写入CSV时使用open函数打开文件,当然使用with open语句更好,但是都需要设置newline参数为空,否则每次写入一行数据,数据之间就会出现空白行。将打开的文件对象加载到CSV对象中,写入数据分为单行写入多行写入,对应函数分别是writerow和writerows。

读取CSV文件,读取函数有readerDictReader,两者都是接收一个可迭代对象,返回一个生成器。reader函数是将一行数据以列表的形式返回;DictReader函数返回的是一个字典,字典的键是这个单元格的标题()列头,而字典的值则是单元格的值。代码参考:

import csv
csvfile=open('csv_text.csv','r',encoding='utf-8')
# 以列表形式输出
reader_list=csv.reader(csvfile)
rows=[row for row in reader_list]
print(rows)
#[['姓名', '性别', '年龄'], ['帅哥', '女', '50'], ['美女', '男', '50']]
csvfile.close()

csvfile=open('csv_text.csv','r',encoding='utf-8')
# 以字典形式输出,第一行作为字典的键
reader_dict=csv.DictReader(csvfile)
rows=[row for row in reader_dict]
print(rows)
#[OrderedDict([('姓名', '帅哥'), ('性别', '女'), ('年龄', '50')]), OrderedDict([('姓名', '美女'), ('性别', '男'), ('年龄', '50')])]
csvfile.close()

以上代码用于获取全部数据,如果要获取某行数据,就可以循环全部数据,再对每行数据做一个判断,判断是否符合筛选条件,代码参考:

import csv
csvfile=open('csv_text.csv','r',encoding='utf-8')
# 以列表形式输出
reader_list=csv.reader(csvfile)
for row in reader_list:
    if '美女' in row:
        print(row)
        # ['美女', '男', '50']
csvfile.close()

csvfile=open('csv_text.csv','r',encoding='utf-8')
# 以字典形式输出,第一行作为字典的键
reader_dict=csv.DictReader(csvfile)
for row in reader_dict:
    if row['姓名']=='美女':
        print(row)
        # OrderedDict([('姓名', '美女'), ('性别', '男'), ('年龄', '50')])
csvfile.close()

行获取某行数据,使用不同的函数会有不同的哦按短方式,reader函数返回的是列表,DictReader返回的是字典,要根据某个值判断筛选,所采用的方法也不一样。CSV的存储相对较为简单!

Excel数据的写入和读取

Python操作Excel的库有xlrd、xlwt、pyExcelerator和openpyxl。其中openpyxl只支持2007版本,pyExcelerator只支持2003版本,xlrd支持Excel任何版本的读取,xlwt支持任何Excel版本的写入。因此,大多数开发人员选择使用xlrd和xlwt操作Excel。直接使用pip命令进行安装即可:pip install xlrd xlwt

Excel的写入相对于CSV比较复杂。Excel可以实现设置数据格式、合并单元格、设置公式和插入图片等功能。代码参考:

import xlwt
# 新建一个Excel文件
wb=xlwt.Workbook()
#新建一个Sheet
ws=wb.add_sheet('鳄鱼君Ba是个帅哥',cell_overwrite_ok=True)
# 定义字体对齐方式对象
align=xlwt.Alignment()
# 设置水平方向
align.horz=xlwt.Alignment.HORZ_CENTER
# 设置垂直方向
align.vert=xlwt.Alignment.VERT_CENTER
#定义格式对象
style=xlwt.XFStyle()
style.alignment=align
# 合并单元格 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,scale_y=1)
# 图片格式必须为 bmp
# x表示行数,y表示列数
# x1表示相对原来位置向右偏移的像素
# y1表示相对于原来位置向下偏移的像素
# scale_x,scale_y缩放比例
ws.insert_bitmap('1.bmp',8,0,30,0,scale_x=0.1,scale_y=0.1)
# 保存文件
wb.save('file.xls')

代码解释:
● 设置字体水平垂直居中:该功能实现共分为两步,第一步是定义xlwt.Alignment()对象,分别设置其水平方向垂直方向的属性;第二步是定义xlwt.XFStyle()对象,将设置好的Alignment()对象赋予XFStyle()对象。在写入数据的时候,XFStyle()对象作为write_merge()方法的参数。
● 合并单元格:主要由write_merge(开始行,结束行,开始列,结束列,内容,格式)方法实现。
● 生成表格并计算每行总和:通过嵌套循环生成5行6列的表格,第1到第5列的数据写入由write()方法实现;第6列数据是累计求和,由Excel自带公式实现。
● 插入图片:图片插入是由insert_bitmap(img, x, y, x1, y1, scale_x=0.3, scale_y=0.3)实现的,图片格式必须为bmp,否则无法插入并提示错误,可以使用PS修改图片格式。

Python中CSV、Excel、Word文档数据的写入和读取

把数据写入Excel的整体思路如下:


(1)xlwt创建生成临时Excel对象。
(2)添加WorkSheets对象。
(3)单元格的位置由行列索引决定,索引从0开始。
(4)数据写入主要由write_merge()和write()实现,两者分别是合并单元格再写入和单元格写入。
(5)设置数据格式是在写入(write_merge()和write())的数据中传入参数style。


接着读取Excel数据,由xlrd模块实现,我们以上面已生成的Excel为读取目标,代码如下:

import xlrd
wb=xlrd.open_workbook('file.xls')
# 获取sheet总数
ws_count=wb.nsheets
print('Sheets总数:',ws_count)
# 通过索引顺序获取Sheets
# ws=wb.sheets()[0]
# ws=wb.sheet_by_index(0)
# 通过Sheet名获取Sheets
ws=wb.sheet_by_name('鳄鱼君Ba是个帅哥')
# 获取整行的值(返回列表)
row_value=ws.row_values(4)
print('第5行数据:',row_value)
# 获取整列的值(返回列表)
row_value=ws.col_values(3)
print('D列数据:',row_value)

# 获取所有行
all_row=ws.nrows
all_col=ws.ncols
print('总行数:%s ,总列数:%s'% (all_row,all_col))
# 获取某个单元格内容cell(行,列)
cell_B4=ws.cell(3,1).value
print('B4内容:',cell_B4)
# 使用行列索引获取某个单元格标题
row_F3=ws.row(2)[5].value
col_F3=ws.col(5)[2].value
print(f'F3内容:{row_F3} ,F3内容:{col_F3}')

读取Excel的数据思路大致如下:
(1)xlrd生成Workbook对象,并指向Excel文件。
(2)选择Workbook里某个WorkSheets对象。
(3)获取WorkSheets里数据已占用的总行数和总列数(某个单元格数据)。
(4)循环总行数和总列数,读取每一个单元格的数据。


Word数据的写入和读取

将数据存储在Word文档中,一般以文章、新闻数据为主。Python读写Word需要第三方库(python-docx模块)支持,直接使用pip命令安装:pip install python-docx

将数据写入Word文档,代码参考:

# 数据写入
from docx import Document
from  docx.shared import Inches
# 创建对象
document=Document()
# 添加标题,0代表标题类型,具体在Word的“开始”-“样式”中查看
document.add_heading('Python教程',1)
# 添加正文内容并设置部分内容格式
p=document.add_paragraph('Python学习,从入门到放弃!')
# 设置内容加粗
p.runs[0].bold=True
# 添加内容并加粗
p.add_run('怎样学习Python').bold=True
# 添加内容
p.add_run('已放弃!')
# 添加内容并设置字体斜体
p.add_run('已放弃!!').italic=True
# 添加正文、设置“样式”-“明显引用”
document.add_paragraph('样式 明显引用',style='Intense Quote')
# 添加正文,设置“项目符号”
document.add_paragraph(
    '项目符号1',style='List Bullet'
)
document.add_paragraph(
    '项目符号2',style='List Number'
)
# 添加图片
document.add_picture('1.jpg',width=Inches(1.25))
# 添加表格
table=document.add_table(rows=1,cols=3)
# 表格内容
tb_cells=table.rows[0].cells
tb_cells[0].text='CSV'
tb_cells[1].text='Excel'
tb_cells[2].text='Word'
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('atext.docx')

Python中CSV、Excel、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文件


读取Word数据比写入数据相对简单,因为不用设置内容格式,直接获取数据即可。实现代码如下:

# 数据读取
import docx
def readDocx(docName):
    all_text=[]
    doc=docx.Document(docName)
    # 读取全部内容
    paras=doc.paragraphs
    # 将每行数据存入列表
    for p in paras:
        all_text.append(p.text)
    # 将列表数据转换正字符串
    return '\n'.join(all_text)
print(readDocx('test.docx'))

在Word中读取数据的整体思路如下:
(1)生成Word对象,并指向Word文件。
(2)使用paragraphs()获取Word对象全部内容。
(3)循环paragraphs对象,获取每行数据并写入列表。
(4)将列表转换为字符串,每个列表元素使用换行符连接,转换后数据的段落布局与Word文档相似。

更多内容参考:Python自动化办公(Excel、Word、PPT)

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Python中CSV、Excel、Word文档数据的写入和读取》 发布于2020-06-03

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

5 + 6 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册