实战Python图形文件操作基本编程!

您所在的位置:网站首页 walk的用法总结 实战Python图形文件操作基本编程!

实战Python图形文件操作基本编程!

2022-12-12 23:04| 来源: 网络整理| 查看: 265

我们应该都明白数据处理对于CV来说至关重要,今天我们不说数据增强等高大上的操作,我们来聊聊当我们拿到图片数据时如何对图片数据进行整理,如更改图片文件格式和文件名等等。

1 遍历图片文件/文件夹

当提到文件/文件夹遍历时我们就不得不提python中的os.walk这个简单易用的文件、目录遍历器。它可以帮助我们高效的处理文件、目录方面的事情。话不多说,我们直接看代码和具体用法。

现在我们有如下的文件结构:

Python资源共享群:484031800

我们看看如何通过os.walk来遍历上面的这些图片按和目录。

import os

rootDir = r"D:\file\kobe"

for root, dirs, files in os.walk(rootDir):

通过上面代码如果我们输出root即print(root),会得到下面的结果。

D:\file\kobe

D:\file\kobe\a

D:\file\kobe\b

D:\file\kobe\b\c

我们对照的看下输出结果和文件结构,应该明白了root实际上就是各个目录(文件夹)的路径,当然这里是包括顶级目录的,如我们这里的kobe文件夹。

我们再看看输出dirs后的结果。

['a', 'b']

[]

['c']

[]

['a','b']实际上是root中第一个路径( D:\file\kobe )中包含的文件夹,即kobe文件夹中的文件夹。第二行的输出[]和第四行的输出[]依次就是a文件夹和c文件夹中的包含的文件夹。由于a和c中都没有文件夹,所以输出都是[],第三行的['c']实际上是root中第三个路径(D:\file\kobe\b)中包含的文件夹c文件夹。综上分析我们知道dirs实际上就是root中的各个文件夹。

最后我们再看看files,顾名思义,这个files的输出就是各个文件了,如下:

['kobe1.jpg', 'kobe2.jpg', 'kobe3.jpg', 'kobe4.jpg']

['kobe5.jpg']

[]

[]

参照root的输出结果,上面的输出依次就是kobe文件夹中的文件、a文件夹中的文件、b文件夹中的文件和c文件夹的文件。

通过上面的介绍,我相信你已经明白了os.walk的具体用法和使用Python来遍历图片文件/文件夹了。

2 更改文件名字和格式

现在我们有个kobe文件夹,里面图片如下:

现在我们需要将这五张图片统一更改名称和格式,更改后的格式如下KOBE_i.jpg,其中i为1-5。

import os

rootDir = r"D:\file\kobe"

i = 1

for root, dirs, files in os.walk(rootDir):

for f in files:

srcname = os.path.join(root, f)

srcformat = srcname.split('.')[-1]

if srcformat is not "png":

new_item = "KOBE"+str(i)+ '.png'

os.rename(srcname, os.path.join(rootDir, new_item))

i+=1

现在我们分析下上面的代码。通过1.1的讲解我相信你应该知道root,dirs和files这三个变量里面的内容了。那么srcname即os.path.join(root,f)又是什么呢?我先输出下secname。结果如下:

D:\file\kobe\KOBE_1.png

D:\file\kobe\KOBE_2.png

D:\file\kobe\KOBE_3.png

D:\file\kobe\KOBE_4.png

D:\file\kobe\KOBE_5.png

很显然,srcname就是每个图片文件的名字。而root=D:\file\kobe,files=['KOBE_1.png', 'KOBE_2.png', 'KOBE_3.png', 'KOBE_4.png', 'KOBE_5.png']。相信你应该知道os.path.join()的作用了,它实际上就是将join()里面参数拼接成一个完整的路径。

3 将图片路径输出到文本文件中

话不多说,我们直接上代码,如下:

import os

rootDir = r"D:\file\kobe"

i = 1

ftxtfile = open(r"D:\file\a.txt",'w')

for root, dirs, files in os.walk(rootDir):

print(root)

print(files)

for f in files:

srcname = os.path.join(root, f)

srcformat = srcname.split('.')[-1]

if srcformat is not "png":

new_item = "KOBE_"+str(i) + '.png'

newname = os.rename(srcname, os.path.join(rootDir, new_item))

ftxtfile.write(os.path.join(rootDir, new_item )+ '\n')

i+=1

我们通过上面的代码就可以将图片路径输出到.txt文件中。其实很简单,首先通过open()打开txt文件,然后通过write()将需要写入的内容写进去就行了。下面就是写入后的结果:

4 批量复制图片文件

现在按照第三节中得到的txt文件中的内容将图片复制到另外一个文件夹中(D:\file\file\a),代码如下:

import shutil

def objFileName():

local_file_name_list = r'D:\file\a.txt'

# 指定名单

obj_name_list = []

for i in open(local_file_name_list, 'r'):

obj_name_list.append(i.replace('\n', ''))

print(obj_name_list)

return obj_name_list

def copy_img():

local_img_name = r"D:\file\kobe"

path = r"D:\file\file\a"

# 指定存放图片的目录

for i in objFileName():

print(i)

shutil.copy(i, path )

if __name__ == '__main__':

copy_img()

在这个代码中我们主要用到了shutil.copy()这个函数,它的具体用法如下:

shutil.copy(source, destination) , 其中source/destination 都是字符串形式的路径,source是原文件或者原文件夹的路径。destination是目标文件或者目标文件夹的路径 。

另外在这个代码中我们定义了一个函数objFileName(),它的作用是将.txt文件中的图像路径转化成一个list。你可以像上面代码的加粗部分那样进行验证。会得到如下结果。

['D:\\file\\kobe\\KOBE_1.png', 'D:\\file\\kobe\\KOBE_2.png', 'D:\\file\\kobe\\KOBE_3.png', 'D:\\file\\kobe\\KOBE_4.png', 'D:\\file\\kobe\\KOBE_5.png']

5 批量更改图片文件尺寸

我们知道通常训练网络结构模型的时候,图像的输入大小需要保持一个定值,如224X224等。下面这个代码就可以批量改变图片大小到指定尺寸。

from PIL import Image

import os.path

import glob

def convertpng(pngfile, outdir, width=48, height=48):

img = Image.open(pngfile)

try:

basename = os.path.basename(pngfile)

filename = os.path.splitext(basename)[0]

filetype = os.path.splitext(basename)[1] # 文件扩展名

new_img = img.resize((width, height), Image.BILINEAR)

new_img.save(os.path.join(outdir, filename+"_"+str(width)+"x"+str(height)+filetype))

except Exception as e:

print(e)

for pngfile in glob.glob(r"D:\file\kobe"+"/*.png"):

convertpng(pngfile , r"D:\file\file\b",224,224)

更改图片大小前的样式如下:

我们先看下代码运行后的结果,如下:

上面的代码我们主要定义了一个将图片大小resize到指定大小的convertpng函数,这个函数总共有四个参数,分别是pngfile,outdir和图像需要更改的宽度和高度。其中pngfile就是需要更改大小的图片文件,outdir是图片更改大小后的保存路径。

总结

本期我们介绍了如何使用Python对文件进行处理,希望它对你在图像数据处理方面有些帮助。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3