python 畅玩os模块 顺便批量修改个图片尺寸,今日头条面试算法

os.rename(原绝对路径,新绝对路径)

▲获取 路径/目录/文件 名

1.获取指定路径下的目录和文件名

os.listdir(abspath)

返回一个列表,文件名与目录名都在里面。

2.★os.walk函数

这个函数功能强大的不行,就像它名字一样,随便逛随便看os系统信息,因此它的作用是能递归地获取目录下的所有信息(路径/目录/文件名)。(它借助了os.listdir函数)

批量处理图片尺寸

========

了解OS模块之后我们就要开始干正事了。

实现思路


首先要新建一个目录用于存放修改后的图片。我们的目的是统一图片尺寸,因为我们每张图片的大小都比较接近,所以我们以第一张图片的大小作为标准,将其余图片的大小设置成第一张图片的尺寸。然后保存到新建的目录当中。

(在图片大小与修改后的大小不一致的情况下,原图会经过一定比例放大或缩小得到修改后的图片,因此无需担心图片内容的丢失。)

**注意:**如果传入的路径存在多个图片文件夹,我们希望在每个存有图片的文件夹里面都新建一个文件夹来存放修改后的图片。

详细步骤


安装PIL库

进入pycharm的terminal 或 cmd命令行

输入

pip install pillow

即可完成安装PIL库。

创建文件夹

我们需要创建一个文件夹用来保存修改后的图片。如果这个文件夹已经存在的话,我们需要删除里面的文件。怎么删除?第一个方法是使用shutil的rmtree函数删除整个文件夹后再使用os.mkdir函数创个新的,第二个方法是使用我们os.walk函数逐步删除里面所有文件,但这样比较繁琐,如果遇到多个目录的时候删起来就难受了,所以还是用rmtree删除实在些。

因此我们定义一个创建文件夹作为输出路径的方法。

在遇到第一张图片时所在的目录创建(可能会在不同目录创建,取决于你传入的路径含有的图片文件夹。每存在一个图片文件夹就会在里面创建一个存放修改后图片的文件夹)

如果已存在文件夹则清空文件,否则创建一个新的

def initialize_folder(output_folder):

print(“初始化…”)

if os.path.exists(output_folder):

shutil.rmtree(output_folder)

os.mkdir(output_folder)

print(“初始化文件夹 %s 成功!” % (output_folder.split(os.sep)[-1]))

批量处理

我们使用os.walk遍历图片文件夹,如果文件是图片的格式的话,我们获取他的文件路径并确定导出路径。如果是第一张图片的话我们还需要初始化文件夹,以及获取图片尺寸。最后将图片尺寸,路径和保存路径交给PIL模块处理。最后给出些人性化提示。

path: 图片文件夹路径 fname: 保存修改文件的目录名

def file_handling(path, fname):

for dir_path, listdir, files in os.walk(path):

根据目录路径获取目录名 os.sep表示分割符

dir_name = dir_path.split(os.sep)[-1]

如果此时的目录跟保存路径一致,那么需要跳过

if dir_name == fname:

continue

print(“正在处理 %s 文件夹文件…\n” % dir_name)

设置进度

rate = 1

记录总数

c = len(files)

for file in files:

如果后缀名不是图片格式则需要跳过

if file.split(‘.’)[-1].lower() not in “pngjpgjpeg”:

continue

文件路径

file_path = os.path.join(dir_path, file)

保存路径

export_path = os.path.join(dir_path, fname, file)

if rate == 1:

初始化文件夹 用于存放修改后的图片

initialize_folder(os.path.join(dir_path, fname))

img = Image.open(file_path)

width = img.size[0]

height = img.size[1]

交给雕工师傅

resize_image(file_path, export_path, width, height)

print(“已完成 {:.2f} %\t{:d}个文件”.format(rate / c * 100, rate))

rate += 1

print(“保存成功!”)

修改图片尺寸

三步走战略:打开->修改->保存。

我们修改图片尺寸使用的是PIL下面的Image模块的方法,需要提前导入。

from PIL import Image

最后使用resize方法修改大小即可,resize顾名思义,修改尺寸。

修改图片大小

def resize_image(file_path, export_path, width, height):

img = Image.open(file_path)

Image.ANTIALIAS:抗锯齿,提高图片质量

r = img.resize((width, height), Image.ANTIALIAS)

r.save(export_path)

主函数

作为函数的入口需要确定图片路径及目录名,然后调用以上方法。

if name == ‘main’:

获取存放图片总路径

path = r’%s’ % (input(“请将您的存放图片的路径复制于此:”))

指定输出文件夹名

fname = r’lishuaige’

file_handling(path, fname)

完整代码


from PIL import Image

import os

import shutil

修改图片大小

def resize_image(file_path, export_path, width, height):

img = Image.open(file_path)

Image.ANTIALIAS:抗锯齿,提高图片质量

r = img.resize((width, height), Image.ANTIALIAS)

r.save(export_path)

如果已存在文件夹则清空文件,否则创建一个新的

def initialize_folder(output_folder):

print(“初始化…”)

if os.path.exists(output_folder):

shutil.rmtree(output_folder)

os.mkdir(output_folder)

print(“初始化文件夹 %s 成功!” % (output_folder.split(os.sep)[-1]))

path: 图片文件夹路径 fname: 保存修改文件的目录名

def file_handling(path, fname):

for dir_path, listdir, files in os.walk(path):

根据目录路径获取目录名 os.sep表示分割符

dir_name = dir_path.split(os.sep)[-1]

如果此时的目录跟保存路径一致,那么需要跳过

if dir_name == fname:

continue

print(“正在处理 %s 文件夹文件…\n” % dir_name)

设置进度

rate = 1

记录总数

c = len(files)

for file in files:

如果后缀名不是图片格式则需要跳过

if file.split(‘.’)[-1].lower() not in “pngjpgjpeg”:

continue

文件路径

file_path = os.path.join(dir_path, file)

保存路径

export_path = os.path.join(dir_path, fname, file)

if rate == 1:

初始化文件夹 用于存放修改后的图片

initialize_folder(os.path.join(dir_path, fname))

img = Image.open(file_path)

width = img.size[0]

height = img.size[1]

交给雕工师傅

resize_image(file_path, export_path, width, height)

print(“已完成 {:.2f} %\t{:d}个文件”.format(rate / c * 100, rate))

rate += 1

print(“保存成功!”)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

3c8856824a0d6186c1.png)

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-xTQdhDD2-1712698481997)]

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值