1.CSV数据的写入和读取
Python标准库自带CSV模块,不用自行安装
摘自:玩转Python网络爬虫
- open函数打开或新建CSV文件,模式为w,生成file对象
- CSV模块的writer()方法加载file对象
- 使用writerow()或writerows()写入一行或多行数据
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import csv
#存在文件,打开csv文件;不存在文件,则新建文件
#不设置newline='',则每行数据会隔一行空白行
with open('csv_test.csv','w',newline='') as csvfile:
#将文件加载到csv对象中
writer=csv.writer(csvfile)
#写一行数据
writer.writerow(['姓名','年龄','电话'])
#写入多行数据
data=[
('张三','18','123456789'),
('李四','22','987654321')
]
writer.writerows(data)
- open函数打开CSV文件,模式为r,生成file对象
- CSV模块的writer()方法加载file对象
- 使用reader或DictReader读取数据
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import csv
with open('csv_test.csv','r') as csvfile:
#以列表形式输出
reader=csv.reader(csvfile)
#以字典形式输出
#reader=csv.DictReader(csvfile)
rows=[row for row in reader]
print(rows)
2.Excel数据写入和读取
pyExcelerator只支持2003版本,openpyxl只支持2007版本,xlrd支持Excel任何版本的读取,xlwt支持Excel任何版本的写入
pip install xlrd
pip install xlwt
- xlwt创建生成临时Excel对象
- 添加WorkSheets对象
- 单元格的位置有行列索引决定,索引从0开始
- 数据写入主要由write_merge()和write()实现,前者要合并单元格
- 设置数据格式是在写入数据传入参数style
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import xlwt
#新建一个Excel文件
wb=xlwt.Workbook()
#新建一个Sheet
ws=wb.add_sheet('Python',cell_overwrite_ok=True)
#定义字体对齐方式对象
alignment=xlwt.Alignment()
#设置水平方向
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{0}:E{0})'.format(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('E:\\test.bmp',9,1,2,2,scale_x=0.3,scale_y=0.3)
#保存文件
wb.save('file.xls')
- xlrd生成Workbook对象,并指向Excel文件
- 选择Workbook里某个Workbook对象
- 获取Workbook里数据的总行数和总列数
- 循环总行数和总列数,读取每个单元格的数据
#!/usr/bin/python3
# -*- coding: utf-8 -*-
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)
#获取整列的值
col_value=ws.col_values(3)
print('第4列数据',col_value)
#获取所有行列
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(2)[5].value
print('F3内容:',row_F3,'F3内容:',col_F3)
3.Word数据写入和读取
Python 读写Word需要第三方库扩展支持
pip install python-docx
- 创建生成临时Word对象并使用以下方法添加内容
- add_heading()添加标题
- add_paragraph()添加正文内容
- add_picture()插入图片
- add_table()添加表格
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from docx import Document
from docx.shared import Inches
#创建对象
document=Document()
#添加标题,其中'0'代表标题类型,共有4中类型
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文件
- paragraphs()获取Word对象全部内容
- 循环paragraphs对象,获取每行数据写入列表
- 将列表转换为字符串
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import docx
def readDocx(docxName):
fullText=[]
doc=docx.Document(docxName)
#读取全部内容
paras=doc.paragraphs
#将每行数据存入列表
for p in paras:
fullText.append(p.text)
return '\n'.join(fullText)
print(readDocx('test.docx'))