写点什么

给工作加点料——试一试 python

作者:为自己带盐
  • 2022 年 9 月 06 日
    河北
  • 本文字数:2306 字

    阅读完需:约 8 分钟

给工作加点料——试一试python

背景

突然接到一个临时需求,提供多个 excel 文件,然后根据文件中的内容,以一定的规则拼接对应图片资源的下载路径,在按照 excel 文件种的部分字段属性,生成存储路径,并把图片以指定文件名存到对应地址下

总的来说就是,2 个具体需求

  • 读取 excel 文件,拼接下载地址

  • 下载图片,并存放到指定的路径下。

我定睛一看,这不就是个最简单的爬虫工具吗。


快速选型

在我刚毕业的那两年了,大部分时间几乎都是搞这种爬虫工具了,所以,这个对我来说没什么挑战。

但是呢,可能是因为审美疲劳,我突然不想用 C#来写这个工具了,而需求又比较急,所以我就先写好了一份 C#的代码。整理完后,发现距离规定的时间还很多,当下也没别的紧急的事情,就想着试试用 python 在重写一份!

因为早就听说 python 在爬虫和数据整理这方面的厉害,只是没自己上手试过,正好机会难得,那就来试一试吧!


1 分钟搭环境(额..时间不含下载过程)

*下载 Python

这个不用多说,有需要的直接官网走起👉:https://www.python.org/

安装好后,控制台验证安装是否成功


配置开发环境

因为不是主要开发语言,而且我也只是打算把 Python 当成一种高度自定义的软件来使用,所以我这里就没有安装专用的 pycharm 集成开发环境,而是直接 VSCode+python 插件来做的。

配置过程也很简单,安装好 python 和 vscode 后,在 vscode 的扩展市场搜索“python”关键字即可。

因为我对 python 不熟悉,所以就直接安装了带星标的插件,当然可能有更好的。

好了,到此开发环境就搭好了~


写代码

建立工作区

找一个没人的地方,建好指定的目录,然后在目录下,打开 vscode,设为这个 python 程序的工作区

如果用的是 Windows11,可以直接在当前目录,右击,进入终端,然后输入

code .
复制代码

就 ok 了。当然其他 windows 版本可以在地址栏键入 cmd 呼出命令行窗口,然后执行相同命令即可。


读取 excel

需求的第一步就是读取 excel 文件,那我通过百度了解到,python 读取 excel 有很多种方式,在知乎上有个哥们,还列了个这样的图


那就简单了啊,咱肯定是得选全是对勾的库啊!所以,操作 excel 的库,就用的 xlwings 了。

当然了,在选它之前,肯定还是得先大概了解下,不能光凭一张图啦。

xlwings 的官方文档在这里👉:https://www.xlwings.org/

通过文档可以了解到,这个库是开源免费的,虽然比较年轻,连 1.0 的版本都还没有(现在在快速迭代中,基本 3-4 天就更一个版本,最新的版本是v0.27.14),但热度很高,能力也是超群,文档也很详细。所以最终还是选的它!

关于更多关于 xlwings 的用法,大家可以直接去看文档


import xlwings as xwimport download as dl
# 要打开的文件file_path = r'./beijing.xls'
# 设定读取方式为后台读取app = xw.App(visible=False, add_book=False)app.display_alerts = Falseapp.screen_updating = Falsewb = app.books.open(file_path)
# 还可以直接这样,但这样会打开一个只读的窗口# xw.Book(file_path)
sheet = wb.sheets.active
# 划定读取范围ret = sheet.range('A2:E552').valuefor item in ret: print(item[0]) # 下载 dl.file_download('{}\\{}'.format(item[2], item[3]), item[4], item[1])
复制代码


下载文件

根据读取 excel 来的信息,就可以进行网络请求,并进行下载了

import osimport urllib.request as req

def file_download(path, url, filename): basedir = os.path.abspath(os.path.dirname(__file__)) file_path = os.path.join(basedir, path)
try: # 创建存储路径 if not os.path.exists(file_path): os.makedirs(file_path) if len(filename) == 0: filename = os.path.basename(url) # 打印下信息 print(url+','+filename) # 设置headers不然可能会返回403forbedden headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} # 请求 r = req.Request(url=url, headers=headers) # 存储 with open(file_path+"\\"+filename+".jpg", 'wb') as f: f.write(req.urlopen(r).read()) print('{},下载成功'.format(filename))
except IOError as exception_first: print(1, exception_first) except Exception as exception_second: print(2, exception_second)
复制代码


好了,到这里,代码就写完了,赶紧跑一下看看效果


结果




嗯,基本是按照预想的结果来的文件批量下载,并保存到指定路径。


总结

因为我这里的需求很简单,基本是一次性工作,下载量也就几百个文件,所以到这里 python 的尝试就结束了。但回头来看,其实还有很大的优化空间,比如,是否可以开多个线程同时进行下载,或者是否可以同时链接多个 excel 文件等等,后续有待继续探索。

对了,最后我还想在多数两句!通过这次对 python 的尝试,我觉得 python 真的是一种人人皆可上手的编程语言!

它风格独特,简单,如果你有其他语言的基础,再写 python 的代码有一种挣脱束缚的感觉,分号不用写了,逻辑语句也不用结尾关键字,通过间隔就搞定了,第三方组件包的安装也非常方便流畅,而且线上的资源足够多等等...

总之就是如果是处理繁杂的日常工作,通过总结发现工作是可以进行自动化或者半自动化来处理的,而市面上或者自己并不知道有这样的软件工具,就可以试试用 Python 来解决。

当然作为专业的 Python 开发,可能要学习很多关联的知识,可能会对一些代码的写法十分挑剔。但胜在咱不是专业的啊,咱用 Python 就是纯纯的面向偷懒编程!

所以我觉得,python 真的是一种人人可学的编程语言!是一个礼物语言🎁!

好了,就这些了。


发布于: 刚刚阅读数: 3
用户头像

学着码代码,学着码人生。 2019.04.11 加入

狂奔的小码农 http://www.tonydf.top (这是个循环圈)

评论

发布
暂无评论
给工作加点料——试一试python_Python_为自己带盐_InfoQ写作社区