python更新excel内容_[原创]使用 Python 读写 Excel 文件(一)更新

项目要求

如果说是 Office 办公软件使得 Windows 成为主流的操作系统,那么 Excel 就是使得微软硬起来的法宝!

Word 和 PowerPoint 都有不相上下的对手,但 Excel 几乎是无法被取代的,因为这玩意儿确实太逆天了,它甚至让一向自命不凡的苹果用户都纷纷拜倒。

有人说 “对职场人而言,掌握 Excel,其实是在解放自己;对企业家而言,了解 Excel,其实是在赢得先机。

没错,Excel 就是这么吊。

作为程序猿,我们也离不开 Excel。

从网页爬下来的海量数据可以用 Excel 清洗过滤,成堆的实验数据也可以用 Excel 进行分析……

当然,大家不要想歪了,咱今天的课程不是教大家 Excel 怎么玩?

而是讲如何使用 Python 来操作 Excel!

要求:使用 python 读写 Excel 文件。

开发思路

得益于前人的辛勤劳作,Python 处理 Excel 已有很多现成的 “轮子”

openpyxl 模块的使用。关于这个模块的详细用法,大家可以参考 ->openpyxl 模块中文文档

openpyxl 模块简单易用、功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等功能应有尽有,图表功能是其一大亮点。

思路一:安装 openpyxl 模块

打开 cmd 命令行窗口,输入pip install openpyxl命令即可 “一键安装”:

784718_9F6WXFT2RD5XZ6Q.jpg

注:如果当前环境下安装有多个版本的 Python,请确保 pip 命令对应的 Python 版本(参见 ->如何让多个版本的 Python 和谐共处)

打开 IDLE,执行import openpyxl语句,如果没有报错,那就说明成功安装啦:

784718_T8N9DFCRNRXCJ5X.jpg

思路二:创建并保存 Excel 文件

调用 openpyxl.Workbook() 生成一个 Workbook 的实例化对象,这个就代表一个工作簿(就是一个 Excel 文件):

import openpyxl

wb = openpyxl.Workbook()

# 获取活跃的工作表

ws = wb.active

# 数据可以直接赋值给单元格

ws['A1'] = 520

# 可以整行添加

ws.append([1, 2, 3])

# Python 类型将自动转换

import datetime

ws['A3'] = datetime.datetime.now()

# 保存文件

wb.save("demo.xlsx")

上面代码依次敲完之后,我们可以在 IDLE 所在的文件夹中找到一个叫做 “demo.xlsx” 的 Excel 文件。

打开之后内容如下:

784718_DNFZX87FJDGUYAB.jpg

思路三:将豆瓣 TOP250 电影排行榜保存为 Excel 文件

《豆瓣TOP250电影排行榜》文本文件:

784718_UFRK4HVXU5VTTDX.jpg

这也没什么问题,但如果现在要你从这 250 部电影中按评分进行排序,那估计又是一场头脑风暴了……

虽然用 Python 可以实现,但在 Excel 上就是点几下鼠标的操作

import requests

import bs4

import re

import openpyxl

def open_url(url):

# 使用代理

# proxies = {"http": "127.0.0.1:1080", "https": "127.0.0.1:1080"}

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'}

# res = requests.get(url, headers=headers, proxies=proxies)

res = requests.get(url, headers=headers)

return res

def find_movies(res):

soup = bs4.BeautifulSoup(res.text, 'html.parser')

# 电影名

movies = []

targets = soup.find_all("div", class_="hd")

for each in targets:

movies.append(each.a.span.text)

# 评分

ranks = []

targets = soup.find_all("span", class_="rating_num")

for each in targets:

ranks.append(each.text)

# 资料

messages = []

targets = soup.find_all("div", class_="bd")

for each in targets:

try:

messages.append(each.p.text.split('\n')[1].strip() + each.p.text.split('\n')[2].strip())

except:

continue

result = []

length = len(movies)

for i in range(length):

result.append([movies[i], ranks[i], messages[i]])

return result

# 找出一共有多少个页面

def find_depth(res):

soup = bs4.BeautifulSoup(res.text, 'html.parser')

depth = soup.find('span', class_='next').previous_sibling.previous_sibling.text

return int(depth)

def save_to_excel(result):

wb = openpyxl.Workbook()

ws = wb.active

ws['A1'] = "电影名称"

ws['B1'] = "评分"

ws['C1'] = "资料"

for each in result:

ws.append(each)

wb.save("豆瓣TOP250电影.xlsx")

def main():

host = "https://movie.douban.com/top250"

res = open_url(host)

depth = find_depth(res)

result = []

for i in range(depth):

url = host + '/?start=' + str(25 * i)

res = open_url(url)

result.extend(find_movies(res))

'''

with open("test.txt", "w", encoding="utf-8") as f:

for each in result:

f.write(each)

'''

save_to_excel(result)

if __name__ == "__main__":

main()

程序实现如下:

784718_DV6KXMGSKWEXM2G.jpg

如果现在要你从这 250 部电影中按评分进行排序,应该如何做呢?

上传的附件:

中央纪委python1.rar

(40.35kb,20次下载)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值