惊为天人的隐秘 [爬虫专题(9)]

                                                                                      《目录》      html


新·Python 操做 excel 文件[爬虫专题不须要掌握的内容]python

 

       "对不起"。数据库

       由于我一直没告诉您,完整的爬虫步骤,实际完整的步骤是:app

       获取数据 -> 解析数据 -> 提取数据 + 存储数据dom

       因此,这一篇要认真学习多动手由于后面的博客确定是须要存储数据的 !!编辑器

       这篇是文件的,数据库的之后更新 ! !函数


存储数据的方式

           经常使用的存储数据的方式有两种——存储成csv格式文件、存储成Excel文件。学习

           其中,csv是一种字符串文件的格式,TA组织数据的语法就是在字符串之间加分隔符——行与行之间是加换行符,同列之间是加逗号分隔。字体

           TA能够用任意的文本编辑器打开(如记事本),也能够用Excel打开,还能够经过Excel把文件另存为csv格式(由于Excel支持csv格式文件),固然 Mac 的Numbers也支持并且很是美观,没有比较就没有伤害。编码

           直白的代码:

file = open('demo.csv','w+')
# 建立demo.csv文件,以覆写的模式
file.write('100天后,要考试,我得预习了')
# 写入test.csv文档
file.close()
# 关闭文件

         把刚刚的程序建立出来的 demo.csv 文件用 Numbers打开:

 

       Excel打开也是相似格式,若是出现中文乱码,把编码类型改为gbk。

       发现了吗?csv文件里的逗号能够充当分隔同列字符串的做用。

       加分隔符是由于不加的话,数据都堆在一块儿,会显得杂乱无章,也不方便咱们以后提取和查找。这也是一种让数据变得有规律的组织方式。

      并且用csv格式存储数据,读写比较方便,易于实现,文件也会比Excel文件小。但csv文件缺乏Excel文件自己的不少功能,好比不能嵌入图像和图表,不能生成公式。

     Excel文件,不用我多说您也知道就是电子表格。有专门保存文件的格式,即xls和xlsx(Excel2003版本的文件格式是xls,Excel2007及以后的版本的文件格式就是xlsx)。

      用print()函数也能够实现csv存储,代码如,

# 写入excel的csv格式文件
csv = open("test.csv", "w+")
print("名称", "数量", "内容", sep=",", file=csv)
print("name1", "1", "1111", sep=",", file=csv)
print("name2", "2", "2222", sep=",", file=csv)
print("name3", "3", "3333", sep=",", file=csv)

 

 


读取与写入

 

 

存储成csv格式文件和存储成Excel文件,这两种不一样的存储方式须要引用的模块也是不一样的。

操做csv文件借助csv模块,不用也能够不过功能就菜了,Python内置不须要下载。

操做Excel文件则须要借助openpyxl模块,须要下载。

 

csv:

import csv
# 引入 csv模块
csv_file = open('demo.csv','w+',newline='',encoding='utf-8')
# 建立csv文件,先调用open()函数,传入参数:文件名“demo.csv”、写入模式“w+”、newline=''、encoding='utf-8'

        “w”就是writer,即文件写入模式,它会以覆盖原内容的形式写入新添加的内容。

         newline=' ',可避免csv文件出现两倍的行距(就是能避免表格的行与行之间出现空白行)。加encoding='utf-8',能够避免编码问题致使的报错或乱码,通常不是utf-8就是gbk。

 

open( )函数
模式 说明 b(bytes,字节) + b+
r(read,读) r只读,文件指针在开头;文件不存在会报错 rb以二进制方式读,其他同左 r+读写,其他同左 rb+二进制读写,其他同左
w(write,写) w只写,文件不存在就建立,存在覆盖 wb二进制只写,其他同左 w+读写,其他同左 wb+二进制读写,其他同左
a(append,追加) a追加,文件存在文件指针放在末尾,文件不存在则建立 ab二进制追加,其他同左 a+追加且可读,其他同左 ab+二进制追加,且可读,其他同左

 

      建立完csv文件,要csv.writer( )函数来创建一个writer对象,接着就可使用这个对象的方法,好比 写入方法。

import csv
# 引入 csv模块

csv_file = open('demo.csv','w+',newline='',encoding='utf-8')
# 建立csv文件,先调用open()函数,传入参数:文件名“demo.csv”、写入模式“w+”、newline=''、encoding='utf-8'
writer = csv.writer(csv_file)
# 用csv.writer()函数建立一个writer对象

csv_file.close()
# 关闭csv文件

      调用方法 --写入

writer.writerow(['客套一下','您好'])
# 方法writerow()能够在csv文件里写入一行文字 列表[] 里面的参数。

      writerow( )须要放入列表参数。

      所以得把要写入的内容写成列表,就像['客套一下','您好'] 。

      若是要打印一个实现一个表格,多调用几回 writerow( ) 就好,第一次调用参数是表格的标题等,后面的调用就是内容。

      只要是文件操做,打开文件了,就必定记得关闭文件! 写完打开文件语句后立马写关闭语句,这样就不会忘记。


      调用方法 --读取

      

import csv

csv_file = open('demo.csv','r',newline='')
reader = csv.reader(csv_file)
# reader()方法返回值是文件行数
for row in reader:
    # 写一个循环依次输出
    print(row)


     写入 + 读取,

import csv

csv_file = open('demo.csv','a+',newline='')   # 由于有写入不能使用 r 读取,我不想之前的内容被覆盖了就用a+

# 写入
writer = csv.writer(csv_file)
writer.writerow(['客套一下','您好'])

csv_file.seek(0) # 让文件指针指向文件开头,由于咱们使用追加文件指针写入数据后在文件末尾,要读取内容要调到文件开头

# 读取
reader = csv.reader(csv_file)
# reader()方法返回值是文件行数
for row in reader:
    # 写一个循环依次输出
    print(row)

csv_file.close()

 

 

一辈子一代一双人,若是想学 Excel 能够看 《从零开始 Excel》。

    CSV官方文档 : https://yiyibooks.cn/xx/python_352/library/csv.html#module-csv


Excel应该比较懂吧由于常常用到:

         Excel 文档的基本知识:工做薄、工做表、单元格

      一个Excel文档也称为一个工做薄(workbook),每一个工做薄里能够有多个工做表(wordsheet),当前打开的工做表又叫活动表。

      每一个工做表里有行和列,特定的行与列相交的方格称为单元格(cell)。好比上图第A列和第1行相交的方格咱们能够直接表示为A1单元格。

      用python也能够控制Excel,只须要一个模块就好,须要下载。


     写入Excel文件

import openpyxl 
# 引入openpyxl
work_book = openpyxl.Workbook()
# openpyxl.Workbook()方法建立新的workbook(工做薄)对象,就是建立新的空的Excel文件。

     建立完新的工做薄后,必须Get工做表。

sheet = work_book.active
# work_book.active就是获取这个工做薄的活动表,一般就是第一个工做表。
sheet.title = 'new title'
# 能够用.title给工做表重命名。如今第一个工做表的名称就会由原来默认的“sheet1”改成"new title"。

     添加完工做表,咱们就能来操做单元格,往单元格里写入内容。

sheet['A1'] = '惺惺相惜' 
# A1的单元格中写入了'惺惺相惜'。

     往单元格里写入内容要定位到具体的单元格,如A1(根据Excel的坐标,A1 表明第一列第一行相交的单元格),而后给这个单元格赋值便可。

     若是咱们想往工做表里写入一行内容的话,就得用到append函数。

row = ['Have','a','good','one','!']
# 写入的一行内容写成列表[]。
sheet.append(row)
# 用sheet.append()就能往表格里添加这一行文字。

     那若是想要一次性写入的不止一行,而是多行内容,又该怎么办?

     ? 简单呀,多用几回append( )不就行了。   恩,对头~

     不过,为了程序简洁和可读性 咱们通常使用循环读取

rows = [['1','1.1','1.9'],['2','2.2','2.8', '3.0','3.00']]
# 先把要写入的多行内容写成列表,再放进大列表里,赋值给rows。
for i in rows:
    sheet.append(i)
#  遍历rows,同时把遍历的内容添加到表格里,这样就实现了多行写入。
print(rows)
# 打印rows

    成功写入后,咱们千万要记得保存这个Excel文件,否则就白写啦!

work_book.save('Marvel.xlsx')
# 保存新建的Excel文件,并命名为“Marvel.xlsx”
import openpyxl 

work_book = openpyxl.Workbook() 
sheet = work_book.active
sheet.title='new title'
sheet['A1'] = '以武会友'
# 单元格A1写入 以武会友

rows= [['泰拳','跆拳','散打'],['自由搏击','太极','少林', '武当','灭绝剑']]
for i in rows:
    sheet.append(i)
print(rows)
work_book.save('Marvel.xlsx')

   Excel文件的读取

  1. import openpyxl 
    
    wb = openpyxl.Workbook() 
    # work_book简写
    
    sheet = wb.active
    sheet.title = 'new title'
    sheet['A1'] = '以武会友'
    # 单元格A1写入 以武会友
    rows = [['泰拳','跆拳','散打'],['自由搏击','太极','少林', '武当','灭绝剑']]
    for i in rows:
        sheet.append(i)
    print(rows)
    wb.save('Marvel.xlsx')
    
    
    # 读取:
    wb = openpyxl.load_workbook('Marvel.xlsx')
    sheet = wb['new title']
    sheetname = wb.sheetnames
    print(sheetname)
    A1_cell = sheet['A1']
    A1_value = A1_cell.value
    print(A1_value)

           (读取)第一行,意思是  用    openpyxl.load_workbook()方法,打开“Marvel.xlsx”文件。

                      第二行,  意思是 Get “Marvel.xlsx”工做薄中名为“new title”的工做表。

                      第3、四行, sheetnames是用来获取工做薄全部工做表的名字的。若是不知道工做薄到底有几个工做表,就能够把工做表的名字都打印出来。

                      第五行后,把“new title”工做表中A1单元格赋值给A1_cell,再利用单元格value属性,就能打印出A1单元格的值。

 

openpyxl模块的官方文档: https://openpyxl.readthedocs.io/en/stable/


练习 

     豆瓣TOP250里面的 序号/电影名/评分/推荐语/连接 都爬取下来,结果是存储在csv和Excel中

import requests, random, bs4

for x in range(10):
    url = 'https://movie.douban.com/top250?start=' + str(x*25) + '&filter='
    res = requests.get(url)
    bs = bs4.BeautifulSoup(res.text, 'html.parser')
    bs = bs.find('ol', class_="grid_view")
    for titles in bs.find_all('li'):
        num = titles.find('em',class_="").text
        title = titles.find('span', class_="title").text
        comment = titles.find('span',class_="rating_num").text
        url_movie = titles.find('a')['href']
        
        if titles.find('span',class_="inq") != None:
            tes = titles.find('span',class_="inq").text
            print(num + '.' + title + '——' + comment + '\n' + '推荐语:' + tes +'\n' + url_movie)
        else:
            print(num + '.' + title + '——' + comment + '\n' +'\n' + url_movie)

      这是咱们以前实现爬取的代码,下面加入数据存储您准备好了吗 ??

      要存储在Excel中呢,须要先建立工做表,重命名,再设置表头,把爬取的信息写成列表,而后用append函数多行写入Excel,最后命名保存这个Excel 文件。

      分析,工做表能够利用上面的Excel存储代码,把名字改为 豆瓣电影TOP250

                  序号/电影名/评分/推荐语/连接的标题, 都分别用一个单元格存储

                  序号/电影名/评分/推荐语/连接对应内容,循环写入对应单元格下

                  最后,保存文件。

 

import requests, random, bs4, openpyxl

wb = openpyxl.Workbook()  
# 建立工做薄对象
sheet = wb.active 
# 获取工做薄的活动表
sheet.title = 'movies' 
# 工做表重命名
sheet['A1'] ='序号'       # 加表头,给A1单元格赋值
sheet['B1'] ='电影名'     # 加表头,给B1单元格赋值
sheet['C1'] ='评分'       # 加表头,给C1单元格赋值
sheet['D1'] ='推荐语'     # 加表头,给D1单元格赋值
sheet['E1'] ='连接'       # 加表头,给E1单元格赋值

for x in range(10):
    url = 'https://movie.douban.com/top250?start=' + str(x*25) + '&filter='
    res = requests.get(url)
    bs = bs4.BeautifulSoup(res.text, 'html.parser')
    bs = bs.find('ol', class_="grid_view")
    for titles in bs.find_all('li'):
        num = titles.find('em',class_="").text
        title = titles.find('span', class_="title").text
        comment = titles.find('span',class_="rating_num").text
        url_movie = titles.find('a')['href']
        
        if titles.find('span',class_="inq") != None:
            tes = titles.find('span',class_="inq").text
            sheet.append([num, title, comment, tes, url_movie])
            # 把num, title, comment, tes和url_movie写成列表,用append函数多行写入Excel
            print(num + '.' + title + '——' + comment + '\n' + '推荐语:' + tes +'\n' + url_movie)
        else:
            sheet.append([num, title, comment, None,url_movie])
            print(num + '.' + title + '——' + comment + '\n' +'\n' + url_movie)
        
          
wb.save('movieTop250.xlsx')            
# 最后保存并命名这个Excel文件

                  

 Excel打开应该会比较好,由于这文件的格式是.xlsx。


下面是 csv 格式实现

import requests,  random, bs4, csv

csv_file=open('movieTop250.csv', 'w', newline='')
# 调用open()函数打开csv文件,传入参数:文件名“movieTop250.csv”、写入模式“w”、newline=''
writer = csv.writer(csv_file)
# 用csv.writer()函数建立一个writer对象。
writer.writerow(['序号', '电影名', '评分', '推荐语', '连接'])
# 调用writer对象的writerow()方法,能够在csv文件里写入title:'序号', '电影名', '评分', '推荐语', '连接'

for x in range(10):
    url = 'https://movie.douban.com/top250?start=' + str(x*25) + '&filter='
    res = requests.get(url)
    bs = bs4.BeautifulSoup(res.text, 'html.parser')
    bs = bs.find('ol', class_="grid_view")
    for titles in bs.find_all('li'):
        num = titles.find('em',class_="").text
        title = titles.find('span', class_="title").text
        comment = titles.find('span',class_="rating_num").text
        url_movie = titles.find('a')['href']
        
        if titles.find('span',class_="inq") != None:
            tes = titles.find('span',class_="inq").text
            # 把num, title, comment, tes和url_movie写成列表,用append函数多行写入Excel
            writer.writerow([num + '.' + title + '——' + comment + '\n' + '推荐语:' + tes +'\n' + url_movie])
        else:
            writer.writerow([num + '.' + title + '——' + comment + '\n' +'\n' + url_movie])
        
csv_file.close()
存储方式
csv文件 csv(内置)
excel文件 openpyxl(须要下载)
csv文件操做步骤
1 建立csv文件 open()函数
2 建立读入对象 .reader()方法
3 建立写入对象 .writer()方法
4 读取文件 循环遍历reader对象
5 写入文件 writer对象writerow()方法
6 关闭文件 close()函数
excel文件操做步骤
1 建立工做薄对象 Workbook()方法
2 获取工做表 .active属性
3 写入单元格 sheet['A1'] = ...
4 读取单元格 sheet['A1'].value
5 保存工做薄 save()

下面的内容,爬虫能够不学。


新·Python 操做 excel 文件

 读[xlrd]

# 读 excel 文件
import xlrd

# 给出文件路径,把文件拖入 终端/命令行 获得文件路径
loc = input('输入文件路径:>  ')

# 打开工做簿
wb = xlrd.open_workbook(loc)
sheet = wb.sheet_by_index(0)

# 获取第0行和第0列
print('第0行和第0列 = ',sheet.cell_value(0, 0))

for i in range(3):      # 行
    for j in range(3):  # 列
        print( (i,j) ,' = ', sheet.cell_value(i, j))

效果如图:

除了行列都从第 0 行开始,其他没有区别。       

 

提取文件 行数 、列数 

print(sheet.nrows)  # 提取 excel 文件行数
print(sheet.ncols)  # 提取 excel 文件列数

 

提取全部列的名称(标题) 

for i in range(sheet.ncols):    # 提取全部列的名称,差很少就是标题
    print(sheet.cell_value(0, i))

 

提取某一列 

for i in range(sheet.nrows):    # 提取第一列,其他列同理
    print(sheet.cell_value(i, 0))

 

提取某一行 

print(sheet.row_values(1))  # 以列表的形式提取第 2 行的值,由于是从 0 开始

 

运行失败的话,要加这个


写[xlwt]

# 写 excel 文件
import xlwt
from xlwt import Workbook

# 建立工做簿
wb = Workbook()

# add_sheet 方法用于建立工做表
sheet1 = wb.add_sheet('Sheet 1')

# 然后想写啥写啥...

sheet1.write(1, 0, 'ISBT DEHRADUN')
sheet1.write(2, 0, 'SHASTRADHARA')
sheet1.write(3, 0, 'CLEMEN TOWN')
sheet1.write(4, 0, 'RAJPUR ROAD')
sheet1.write(5, 0, 'CLOCK TOWER')
sheet1.write(0, 1, 'ISBT DEHRADUN')
sheet1.write(0, 2, 'SHASTRADHARA')
sheet1.write(0, 3, 'CLEMEN TOWN')
sheet1.write(0, 4, 'RAJPUR ROAD')
sheet1.write(0, 5, 'CLOCK TOWER')

# 保存起来
wb.save('xlwt example.xls')

 

添加样式表

 

设置字体样式 

import xlwt 
  
workbook = xlwt.Workbook()  
  
sheet = workbook.add_sheet("Sheet Name") 
  
# 设置样式
style = xlwt.easyxf('font: bold 1') #将字体样式设置为粗体
# 字体设置为红色 style = xlwt.easyxf('font: bold 1, color red;') 
  
# 指定列
sheet.write(0, 0, 'SAMPLE', style) 
workbook.save("sample.xls")

更多的 [openpyxl] 写法

 

 获取工做表名字

import openpyxl

# openpyxl.Workbook()方法建立新的workbook(工做薄)对象,就是建立新的空的 Excel 文件
wb = openpyxl.Workbook() 

# wb.active 就是获取这个工做薄的活动表,一般就是第一个工做表。
sheet = wb.active 

# 有了工做表对象 ta 的名字能够从 标题属性 中获取
sheet_title = sheet.title 

print("active sheet title: " + sheet_title)

 

重命名工做表

sheet.title = "sheet1"

print("sheet name is renamed as: " + sheet.title)

 

俩种写入单元格的方式 

# sheet.cell(row=1, column=1) 与 A[1] 等价
c1 = sheet.cell(row=1, column=1)
c1.value = "ANKIT"
# 输出 A[1] 的值
print(c1.value) 

# sheet.cell(row=1, column=2) 与 B[1] 等价 
c2 = sheet.cell(row=1, column=2)
c2.value = "RAI"

# A = 1, 等于 (row=2, column=1), 由于列标(即字母A)在前
c3 = sheet['A2']
c3.value = "RAHUL"


c4 = sheet['B2']
c4.value = "RAI"

wb.save("demo.xlsx")

 

肯定总行数和总列数

import openpyxl
path = input('文件路径:>  ')
  
wb_obj = openpyxl.load_workbook(path) 
sheet_obj = wb_obj.active 

print(sheet_obj.max_row) 
print(sheet_obj.max_column)

 

打印因此列名称

max_col = sheet_obj.max_column 
  
for i in range(1, max_col + 1): 
    cell_obj = sheet_obj.cell(row = 1, column = i) 
    print(cell_obj.value)

 

运行失败的话,要加这个

 

控制行高列宽

          工做表对象拥有row_dimensionscolumn_dimensions控制的行高和列宽属性。

import openpyxl

wb = openpyxl.Workbook()
sheet = wb.active 

# 写入
sheet.cell(row = 1, column = 1).value = ' hello '
sheet.cell(row = 2, column = 2).value = ' everyone '

# 设置行高
sheet.row_dimensions[1].height = 70

# 设置列宽
sheet.column_dimensions['B'].width = 20

# 保存文件
wb.save('dimension.xlsx')

 

合并单元格

          merge_cells() 工做表方法将矩形单元格区域合并到单个单元格中。参数to merge_cells()是要合并的矩形区域的左上角和右下角单元格的单个字符串。

import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active

# 将单元格从A2合并到D4,即
# A2 B2 C2 D2 A3 B3 C3 D3 A4 B4 C4 D4。
# A2:D4'将12个单元格合并成一个。
sheet.merge_cells('A2:D4')

sheet.cell(row = 2, column = 1).value = 'Twelve cells join together.'

# 合并 C6 and D6
sheet.merge_cells('C6:D6')

sheet.cell(row = 6, column = 6).value = 'Two merge cells.'

wb.save('merge.xlsx')

 

取消合并单元格

          取消合并单元格,请调用unmerge_cells()工做表方法。

sheet.unmerge_cells('A2:D4')

sheet.unmerge_cells('C6:D6')

 

设置文本字体

import openpyxl
from openpyxl.styles import Font

wb = openpyxl.Workbook()
sheet = wb.active

sheet.cell(row = 1, column = 1).value = "Ankit Rai"

# 将单元格的大小设置为24
sheet.cell(row = 1, column = 1).font = Font(size = 24 )

sheet.cell(row = 2, column = 2).value = "Ankit Rai"

# 将字体样式设置为斜体
sheet.cell(row = 2, column = 2).font = Font(size = 24, italic = True)

sheet.cell(row = 3, column = 3).value = "Ankit Rai"

# 将字体样式设置为粗体
sheet.cell(row = 3, column = 3).font = Font(size = 24, bold = True)

sheet.cell(row = 4, column = 4).value = "Ankit Rai"

# 将字体名称设置为“Times New Roman”
sheet.cell(row = 4, column = 4).font = Font(size = 24, name = 'Times New Roman')

wb.save('styles.xlsx')

 

绘制图表

          要在Excel工做表上绘制图表,首先,建立特定图表类的图表对象(即BarChart,LineChart等)。

          建立图表对象后,在其中插入数据,最后,在图表对象中添加该图表对象。

      绘制条形图

import openpyxl

# 要绘制Excel工做表上的条形图,请使用BarChart classopenpyxl.chart子模块
from openpyxl.chart import BarChart,Reference

wb = openpyxl.Workbook()
sheet = wb.active

# 工做表的第一列写 0到9
for i in range(10):
	sheet.append([i])

# 为绘图建立数据
values = Reference(sheet, min_col = 1, min_row = 1, max_col = 1, max_row = 10)

# 建立BarChart类的对象
chart = BarChart()

# 向条形图对象添加数据
chart.add_data(values)

# 设置图表的标题
chart.title = " BAR-CHART "

# 设置 x轴 的标题
chart.x_axis.title = " X_AXIS "

# 设置 y轴 的标题
chart.y_axis.title = " Y_AXIS "

# 将图表添加到工做表中图表的左上角固定在单元格E2上
sheet.add_chart(chart, "E2")

# 保存文件
wb.save("barChart.xlsx")

 

      绘制3D条形图

import openpyxl

# 在Excel工做表上绘制3D条形图,请使用BarChart3D classopenpyxl.chart子模块。
from openpyxl.chart import BarChart3D,Reference
wb = openpyxl.Workbook()
sheet = wb.active

# 在工做表的第一列写 0到9
for i in range(10):
	sheet.append([i])

values = Reference(sheet, min_col = 1, min_row = 1, max_col = 1, max_row = 10)

# 建立BarChart3D类的对象
chart = BarChart3D()

chart.add_data(values)

# 设置图表的标题
chart.title = " BAR-CHART3D "

# 设置 x轴 的标题
chart.x_axis.title = " X AXIS "

# 设置 y轴 的标题
chart.y_axis.title = " Y AXIS "

# 将图表添加到工做表中图表的左上角固定在单元格E2上
sheet.add_chart(chart, "E2")

# 保存文件
wb.save("BarChart3D.xlsx")

 

       绘制面积图

import openpyxl

# 在Excel工做表上绘制Area图表,请使用AreaChart classopenpyxl.chart子模块
from openpyxl.chart import AreaChart, Reference


wb = openpyxl.Workbook()
sheet = wb.active

# 在工做表的第一列写 0到9
for i in range(10):
	sheet.append([i])

values = Reference(sheet, min_col = 1, min_row = 1, max_col = 1, max_row = 10)

# 建立AreaChart类的对象
chart = AreaChart()

chart.add_data(values)

# 设置图表、 x轴、y轴的标题
chart.title = " AREA-CHART "

chart.x_axis.title = " X-AXIS "

chart.y_axis.title = " Y-AXIS "

# 将图表添加到工做表中图表的左上角固定在单元格E2上
sheet.add_chart(chart, "E2")

wb.save("AreaChart.xlsx")

   

     绘制3D面积图

import openpyxl

# 在Excel工做表上绘制3D区域图表,请使用AreaChart3D classopenpyxl.chart子模块
from openpyxl.chart import AreaChart3D,Reference

wb = openpyxl.Workbook()
sheet = wb.active

# 在工做表的第一列写 0到9
for i in range(10):
	sheet.append([i])

values = Reference(sheet, min_col = 1, min_row = 1, max_col = 1, max_row = 10)

# 建立AreaChart3D类的对象
chart = AreaChart3D()

chart.add_data(values)

# 设置图表、x轴、y轴的标题
chart.title = " AREA-CHART3D "

chart.x_axis.title = " X-AXIS "

chart.y_axis.title = " Y-AXIS "

# 将图表添加到工做表中图表的左上角固定在单元格E2上
sheet.add_chart(chart, "E2")

# 保存文件
wb.save("AreaChart3D.xlsx")

 

    绘制折线图

import openpyxl

# 在Excel工做表上绘制折线图,​​请使用LineChart classopenpyxl.chart子模块
from openpyxl.chart import LineChart,Reference

wb = openpyxl.Workbook()
sheet = wb.active

# 在工做表的第一列写 0到9
for i in range(10):
	sheet.append([i])

values = Reference(sheet, min_col = 1, min_row = 1, max_col = 1, max_row = 10)

# 建立LineChart类的对象
chart = LineChart()

chart.add_data(values)

# 设置图表、x轴、y轴的标题
chart.title = " LINE-CHART "

chart.x_axis.title = " X-AXIS "

chart.y_axis.title = " Y-AXIS "

# 将图表添加到工做表中图表的左上角固定在单元格E2上
sheet.add_chart(chart, "E2")

# 保存文件
wb.save("LineChart.xlsx")

 

       绘制3D折线图

import openpyxl

# 在Excel工做表上绘制3D线图,咱们必须使用LineChart3D classopenpyxl.chart子模块
from openpyxl.chart import LineChart3D,Reference

wb = openpyxl.Workbook()
sheet = wb.active

#  在工做表的第一列写 0到9
for i in range(10):
	sheet.append([i])

values = Reference(sheet, min_col = 1, min_row = 1, max_col = 1, max_row = 10)

# 建立LineChart3D类的对象
chart = LineChart3D()

chart.add_data(values)

# 设置图表、x轴、y轴的标题
chart.title = " LINE-CHART3D "

chart.x_axis.title = " X-AXIS "

chart.y_axis.title = " Y-AXIS "

# 将图表添加到工做表中图表的左上角固定在单元格E2上
sheet.add_chart(chart, "E2")

# 保存图片
wb.save("LineChart3D.xlsx")

 

     绘制气泡图

import openpyxl

# 导入BubbleChart, Reference, Series类
from openpyxl.chart import BubbleChart, Reference, Series

wb = openpyxl.Workbook()
sheet = wb.active

rows = [
    ("Number of Products", "Sales in USD", "Market share"),
    (14, 12200, 15),
    (20, 60000, 33),
    (18, 24400, 10),
    (22, 32000, 42),
]

# 将每一行的内容分别写在活动表单的第一、第2和第3列
for row in rows:
    sheet.append(row)

# 建立BubbleChart类的对象
chart = BubbleChart()

# 为绘图建立数据
xvalues = Reference(sheet, min_col=1, min_row=2, max_row=5)

yvalues = Reference(sheet, min_col=2, min_row=2, max_row=5)

size = Reference(sheet, min_col=3, min_row=2, max_row=5)

# 建立第一个系列的数据
series = Series(values=yvalues, xvalues=xvalues, zvalues=size, title="2013")

# 向图表对象添加第一系列数据
chart.series.append(series)

# 设置图表、x轴、y轴的标题
chart.title = " BUBBLE-CHART "

chart.x_axis.title = " X_AXIS "

chart.y_axis.title = " Y_AXIS "

# 将图表添加到工做表中图表的左上角固定在单元格E2上
sheet.add_chart(chart, "E2")

# 保存文件
wb.save("bubbleChart.xlsx")

 

     绘制散点图

import openpyxl

# 在Excel工做表上绘制散点图,请使用openpyxl.chart子模块中的ScatterChart类。
from openpyxl.chart import ScatterChart, Reference, Series

wb = openpyxl.Workbook()
sheet = wb.active

rows = [
    ("Number of Products", "Sales in USD", "Market share"),
    (14, 12200, 15),
    (20, 60000, 33),
    (18, 24400, 10),
    (22, 32000, 42),
]

# 将每一行的内容分别写在活动表单的第一、第2和第3列
for row in rows:
    sheet.append(row)

# 建立ScatterChart类的对象
chart = ScatterChart()

# 为绘图建立数据
xvalues = Reference(sheet, min_col=1, min_row=2, max_row=5)

yvalues = Reference(sheet, min_col=2, min_row=2, max_row=5)

size = Reference(sheet, min_col=3, min_row=2, max_row=5)

# 建立第一个系列的数据
series = Series(values=yvalues, xvalues=xvalues, zvalues=size, title="2013")

# 向图表对象添加第一系列数据
chart.series.append(series)

# 设置图表、x轴、y轴的标题
chart.title = " SCATTER-CHART "

chart.x_axis.title = " X_AXIS "

chart.y_axis.title = " Y_AXIS "

# 将图表添加到工做表中图表的左上角固定在单元格E2上
sheet.add_chart(chart, "E2")

# 保存文件
wb.save("ScatterChart.xlsx")

 

     绘制饼图

                 饼图将数据绘制为圆的切片,每一个切片表明总体的百分比。切片以顺时针方向绘制,0°位于圆的顶部。

import openpyxl

# 在Excel工做表上绘制饼图,请使用openpyxl.chart子模块中的PieChart类
from openpyxl.chart import PieChart, Reference

wb = openpyxl.Workbook()
sheet = wb.active

datas = [
    ['Pie', 'Sold'],
    ['Apple', 50],
    ['Cherry', 30],
    ['Pumpkin', 10],
    ['Chocolate', 40],
]

# 将每一行的内容分别写在活动表单的第一、第2和第3列
for row in datas:
    sheet.append(row)

# 建立PieChart类的对象
chart = PieChart()

# 为绘图建立数据
labels = Reference(sheet, min_col=1, min_row=2, max_row=5)

data = Reference(sheet, min_col=2, min_row=1, max_row=5)

# 向饼图对象添加数据
chart.add_data(data, titles_from_data=True)

# 在图表对象中设置标签
chart.set_categories(labels)

# 设置图表的标题
chart.title = " PIE-CHART "

# 将图表添加到工做表中图表的左上角固定在单元格E2上
sheet.add_chart(chart, "E2")

# 保存文件
wb.save("PieChart.xlsx")

 

      绘制3D饼图

import openpyxl

# 在Excel工做表上绘制3D饼图,请使用openpyxl.chart子模块中的PieChart3D类
from openpyxl.chart import PieChart3D, Reference


wb = openpyxl.Workbook()
sheet = wb.active

datas = [
	['Pie', 'Sold'],
	['Apple', 50],
	['Cherry', 30],
	['Pumpkin', 10],
	['Chocolate', 40],
]

# 将每一行的内容分别写在活动表单的第一、第2和第3列
for row in datas:
	sheet.append(row)

# 建立PiChart3D类的对象
chart = PieChart3D()

# 为绘图建立数据
labels = Reference(sheet, min_col = 1, min_row = 2, max_row = 5)

data = Reference(sheet, min_col = 2, min_row = 1, max_row = 5)

# 向饼图对象添加数据
chart.add_data(data, titles_from_data = True)

# 在图表对象中设置标签
chart.set_categories(labels)

# 设置图表的标题
chart.title = " 3DPIE-CHART "

# 将图表添加到工做表中图表的左上角固定在单元格E2上
sheet.add_chart(chart, "E2")

# 保存文件
wb.save("3DPieChart.xlsx")

 

      绘制圆环图

                   圆环图与饼图相似,只是它们使用圆环而不是圆形。

from openpyxl import Workbook

# 在Excel工做表上绘制圆环图,请使用openpyxl.chart子模块中的DoughnutChart类。
from openpyxl.chart import DoughnutChart, Reference
from openpyxl.chart.series import DataPoint

wb = Workbook()
ws = wb.active

data = [
	['Pie', 2014],
	['Plain', 40],
	['Jam', 2],
	['Lime', 20],
	['Chocolate', 30],
]

# 将每一行的内容分别写在活动表单的第一、第2和第3列
for row in data:
	ws.append(row)

# 建立 甜甜圈(DoughnutChar) 图类的对象
chart = DoughnutChart()

# 为绘图建立数据
labels = Reference(ws, min_col = 1, min_row = 2, max_row = 5)
data = Reference(ws, min_col = 2, min_row = 1, max_row = 5)

# 向甜甜圈图表对象添加数据
chart.add_data(data, titles_from_data = True)

# 在图表对象中设置标签
chart.set_categories(labels)

# 设置图表的标题
chart.title = "Doughnuts Chart"

# 设置图表的样式
chart.style = 26

# 将图表添加到工做表中图表的左上角固定在单元格E1上
ws.add_chart(chart, "E1")

# 保存文件
wb.save("doughnut.xlsx")

 

     绘制雷达图

                 能够在雷达图中绘制工做表上以列或行排列的数据。雷达图比较多个数据系列的总值。它其实是圆形x轴上的面积图的投影。

from openpyxl import Workbook

# 要在Excel工做表上绘制雷达图,请使用openpyxl.chart子模块中的RadarChart类
from openpyxl.chart import RadarChart, Reference

wb = Workbook()
ws = wb.active

data = [
	['Month', "Bulbs", "Seeds", "Flowers", "Trees & shrubs"],
	['Jan', 0, 2500, 500, 0, ],
	['Feb', 0, 5500, 750, 1500],
	['Mar', 0, 9000, 1500, 2500],
	['Apr', 0, 6500, 2000, 4000],
	['May', 0, 3500, 5500, 3500],
	['Jun', 0, 0, 7500, 1500],
	['Jul', 0, 0, 8500, 800],
	['Aug', 1500, 0, 7000, 550],
	['Sep', 5000, 0, 3500, 2500],
	['Oct', 8500, 0, 2500, 6000],
	['Nov', 3500, 0, 500, 5500],
	['Dec', 500, 0, 100, 3000 ],
]

# 把每一行的内容写在第1行和第2行
for row in data:
	ws.append(row)

# 建立 RadarChart 类的对象
chart = RadarChart()

# 填写雷达图类型
chart.type = "filled"

# 为绘图建立数据
labels = Reference(ws, min_col = 1, min_row = 2, max_row = 13)
data = Reference(ws, min_col = 2, max_col = 5, min_row = 2, max_row = 13)

# 向雷达图对象添加数据
chart.add_data(data, titles_from_data = True)

# 在图表对象中设置标签
chart.set_categories(labels)

# 设置图表的标题
chart.title = "Radar Chart"

# 设置图表的样式
chart.style = 26

# 从图表中删除y轴
chart.y_axis.delete = True

# 将图表添加到工做表中图表的左上角固定在单元格G2上。
ws.add_chart(chart, "G2")

# 保存文件
wb.save("Radar.xlsx")

 

     绘制曲面图

                 当您想要在两组数据之间找到最佳组合时,曲面图很是有用。

                 与地形图同样,颜色和图案表示处于相同值范围内的区域。

from openpyxl import Workbook

# 在Excel工做表上绘制Surface图表,请使用openpyxl.chart子模块中的SurfaceChart类。
from openpyxl.chart import SurfaceChart, Reference, Series

wb = Workbook()
ws = wb.active

data = [
	[None, 10, 20, 30, 40, 50, ],
	[0.1, 15, 65, 105, 65, 15, ],
	[0.2, 35, 105, 170, 105, 35, ],
	[0.3, 55, 135, 215, 135, 55, ],
	[0.4, 75, 155, 240, 155, 75, ],
	[0.5, 80, 190, 245, 190, 80, ],
	[0.6, 75, 155, 240, 155, 75, ],
	[0.7, 55, 135, 215, 135, 55, ],
	[0.8, 35, 105, 170, 105, 35, ],
	[0.9, 15, 65, 105, 65, 15],
]

# 把每一行的内容写在第1行和第2行
for row in data:
	ws.append(row)

# 建立SurfaceChart类的对象
chart = SurfaceChart()

# 为绘图建立数据
labels = Reference(ws, min_col = 1, min_row = 2, max_row = 10)
data = Reference(ws, min_col = 2, max_col = 6, min_row = 1, max_row = 10)

# 向表面图表对象添加数据
chart.add_data(data, titles_from_data = True)

# 在图表对象中设置标签
chart.set_categories(labels)

# 设置图表的标题
chart.title = "Surface Chart"

# 设置图表的样式
chart.style = 26

# 将图表添加到工做表中图表的左上角固定在单元格H2上。
ws.add_chart(chart, "H2")

# 保存文件
wb.save("Surface.xlsx")

 

    绘制Surface 3D图表

from openpyxl import Workbook

# 在Excel工做表上绘制3D曲面图,请使用openpyxl.chart子模块中的SurfaceChart3D类。
from openpyxl.chart import SurfaceChart3D, Reference, Series

wb = Workbook()
ws = wb.active

data = [
	[None, 10, 20, 30, 40, 50, ],
	[0.1, 15, 65, 105, 65, 15, ],
	[0.2, 35, 105, 170, 105, 35, ],
	[0.3, 55, 135, 215, 135, 55, ],
	[0.4, 75, 155, 240, 155, 75, ],
	[0.5, 80, 190, 245, 190, 80, ],
	[0.6, 75, 155, 240, 155, 75, ],
	[0.7, 55, 135, 215, 135, 55, ],
	[0.8, 35, 105, 170, 105, 35, ],
	[0.9, 15, 65, 105, 65, 15],
]

# 把每一行的内容写在第1行和第2行
for row in data:
	ws.append(row)

# 建立surface echart3D类的对象
chart = SurfaceChart3D()

# 为绘图建立数据
labels = Reference(ws, min_col = 1, min_row = 2, max_row = 10)
data = Reference(ws, min_col = 2, max_col = 6, min_row = 1, max_row = 10)

# 向Surface chart 3D对象添加数据
chart.add_data(data, titles_from_data = True)

# 在图表对象中设置标签
chart.set_categories(labels)

# 设置图表的标题
chart.title = "Surface Chart 3D"

# 设置图表的样式
chart.style = 26

# 将图表添加到工做表中图表的左上角固定在单元格H2上。
ws.add_chart(chart, "H2")

# 保存文件
wb.save("Surface3D.xlsx")

 

算术运算

        加法

                 = SUM(cell1:cell2):添加一系列单元格中的全部数字。

import openpyxl

# openpyxl.Workbook()方法建立新的workbook(工做薄)对象,就是建立新的空的Excel文件。
wb = openpyxl.Workbook()

# work_book.active就是获取这个工做薄的活动表,一般就是第一个工做表。
sheet = wb.active

# 写入excel表的单元格
sheet['A1'] = 200
sheet['A2'] = 300
sheet['A3'] = 400
sheet['A4'] = 500
sheet['A5'] = 600

# 单元格A7中的值被设置为一个公式,该公式对A一、A二、A三、A四、A5中的值求和。
sheet['A7'] = '= SUM(A1:A5)'

# 保存文件
wb.save("sum.xlsx")

 

           乘法

                     = PRODUCT(cell1:cell2):将单元格范围内的全部数字相乘。

import openpyxl

wb = openpyxl.Workbook()
sheet = wb.active

sheet['A1'] = 2
sheet['A2'] = 3
sheet['A3'] = 4
sheet['A4'] = 5
sheet['A5'] = 6

# 单元格A7中的值被设置为一个公式,该公式乘以A一、A二、A三、A四、A5中的值
sheet['A7'] = '= PRODUCT(A1:A5)'

wb.save("product.xlsx")

 

       平均值

               = AVERAGE(cell1:cell2):TA给出了给定单元格范围内存在的全部数字的平均值(算术平均值)。

import openpyxl

wb = openpyxl.Workbook()
sheet = wb.active

sheet['A1'] = 200
sheet['A2'] = 300
sheet['A3'] = 400
sheet['A4'] = 500
sheet['A5'] = 600

# 单元格A7中的值被设置为一个公式,该公式返回A一、A二、A三、A四、A5中值的平均值。
sheet['A7'] = '= AVERAGE(A1:A5)'

wb.save("average.xlsx")

 

       除法

               = QUOTIENT(num1,num2):返回除法的整数部分。

import openpyxl 

wb = openpyxl.Workbook() 
sheet = wb.active 

# 单元格中的值被设置为给出商数值的公式
sheet['A1'] = '= QUOTIENT(64, 8)'
sheet['A2'] = '= QUOTIENT(25, 4)'

wb.save("quotient.xlsx")

 

        取模

                 = MOD(num1,num2):返回数除以除数后的余数。

import openpyxl 

wb = openpyxl.Workbook() 
sheet = wb.active 

# 单元格中的值设置为给出余数或模量值的公式
sheet['A1'] = '= MOD(64, 8)'
sheet['A2'] = '= MOD(25, 4)'

wb.save("modulus.xlsx")

 

         计数

import openpyxl

wb = openpyxl.Workbook()
sheet = wb.active

sheet['A1'] = 200
sheet['A2'] = 300
sheet['A3'] = 400
sheet['A4'] = 500
sheet['A5'] = 600

# 单元格A7中的值被设置为一个公式,用于计算单元格中出现的数量
sheet['A7'] = '= COUNT(A1:A6)'

wb.save("count.xlsx")

 

三角函数

  •            =SIN(Number)   :  返回一个角的正弦值,数字是以弧度为单位的角,求正弦值。
  •            =COS(Number) :  返回一个角的余弦值。
  •            =TAN(Number)  :  返回一个角的正切。
  •            =CSC(Number) :  返回一个角的余割。
  •            =SEC(Number) :  返回一个角的正割。
  •            =COT(Number) :  返回一个角的余切。
import openpyxl

wb = openpyxl.Workbook()
sheet = wb.active

# 设置列的宽度
sheet.column_dimensions['A'].width = 20
sheet.column_dimensions['B'].width = 30
sheet.column_dimensions['C'].width = 20

# 写入excel表的单元格
sheet['A1'] = "angles in radian"
sheet['A2'] = 0.1
sheet['A3'] = 0.2
sheet['A4'] = 0.3
sheet['A5'] = 0.4
sheet['A6'] = 0.5
sheet['A7'] = 0.6

# 涉及到的三角运算
sheet['B1'] = "Applying trigonometric function"
sheet['B2'] = "Sine"
sheet['B3'] = "Cosine"
sheet['B4'] = "Tangent"
sheet['B5'] = "Cosecant"
sheet['B6'] = "Secant"
sheet['B7'] = "Cotangent"

# 单元格C1到C7中的值被设置为计算特定弧度值的公式
sheet['C1'] = 'corresponding values'
sheet['C2'] = '= SIN(0.1)'
sheet['C3'] = '= COS(0.2)'
sheet['C4'] = '= TAN(0.3)'
sheet['C5'] = '= CSC(0.4)'
sheet['C6'] = '= SEC(0.5)'
sheet['C7'] = '= COT(0.6)'

# 保存文件
wb.save("simple_trigonometric.xlsx")

           

 

    双曲三角函数

  • =SINH(Number) :   返回一个数字的双曲正弦值。
  • =COSH(Number) : 返回一个数字的双曲余弦值。
  • =TANH(number) :  返回一个数字的双曲正切。
  • =CSCH(Number) : 返回一个数字的双曲余割。
  • =SECH(Number) : 返回一个数字的双曲正割。
  • =COTH(Number) : 返回一个数字的双曲余切。
import openpyxl

wb = openpyxl.Workbook()
sheet = wb.active

# 设置列的宽度
sheet.column_dimensions['A'].width = 20
sheet.column_dimensions['B'].width = 30
sheet.column_dimensions['C'].width = 20

# 写入excel表的单元格
sheet['A1'] = "angles in radian"
sheet['A2'] = 0.1
sheet['A3'] = 0.2
sheet['A4'] = 0.3
sheet['A5'] = 0.4
sheet['A6'] = 0.5
sheet['A7'] = 0.6

# 涉及到的三角函数
sheet['B1'] = "Applying trigonometric function"
sheet['B2'] = "Hyperbolic Sine"
sheet['B3'] = "Hyperbolic Cosine"
sheet['B4'] = "Hyperbolic Tangent"
sheet['B5'] = "Hyperbolic Cosecant"
sheet['B6'] = "Hyperbolic Secant"
sheet['B7'] = "Hyperbolic Cotangent"

# 单元格C1到C7中的值被设置为计算特定弧度值的公式。
sheet['C1'] = 'corresponding values'
sheet['C2'] = '= SINH(0.1)'
sheet['C3'] = '= COSH(0.2)'
sheet['C4'] = '= TANH(0.3)'
sheet['C5'] = '= CSCH(0.4)'
sheet['C6'] = '= SECH(0.5)'
sheet['C7'] = '= COTH(0.6)'

# 保存文件
wb.save("Hyperbolic_trigonometric.xlsx")