首页 > 编程语言 >【Python进阶】实战Python图形文件操作基本编程

【Python进阶】实战Python图形文件操作基本编程

时间:2022-10-12 16:07:37浏览次数:55  
标签:文件 进阶 Python 文件夹 file KOBE kobe 图形文件


欢迎来到专栏《Python进阶》。在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件、数据的处理,Python各种好用的库如NumPy、Scipy、Matplotlib、Pandas的使用等等。我们的初心就是带大家更好的掌握Python这门语言,让它能为我所用。

今天是《Python进阶》专栏的第二期,在本期中,我们将主要介绍如何利用Python对图像文件进行一些处理。

作者&编辑 | 汤兴旺

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

1 遍历图片文件/文件夹

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

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

【Python进阶】实战Python图形文件操作基本编程_数据

【Python进阶】实战Python图形文件操作基本编程_python_02

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

import os

通过上面代码如果我们输出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文件夹,里面图片如下:

【Python进阶】实战Python图形文件操作基本编程_数据_03

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

import os

【Python进阶】实战Python图形文件操作基本编程_tensorflow_04

现在我们分析下上面的代码。通过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 osftxtfile = open(r"D:\file\a.txt",'w')  ftxtfile.write(os.path.join(rootDir, new_item )+ '\n')

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

【Python进阶】实战Python图形文件操作基本编程_数据_05

4 批量复制图片文件

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

import shutil

 print(obj_name_list)

在这个代码中我们主要用到了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

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

【Python进阶】实战Python图形文件操作基本编程_python_06

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

【Python进阶】实战Python图形文件操作基本编程_tensorflow_07

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

总结

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

下期预告:Python库NumPy的高级应用

有三AI编程微信公众号《三人行ToCode》

【Python进阶】实战Python图形文件操作基本编程_tensorflow_08

有三AI编程方面的微信公众号《三人行ToCode》创建了,欢迎加入,希望大家能借助这个平台,扎实自己的编程基础。

标签:文件,进阶,Python,文件夹,file,KOBE,kobe,图形文件
From: https://blog.51cto.com/u_14122493/5751009

相关文章

  • 单链表-Python实现-jupyter->markdown 格式测试
    单链表引入顺序表理解Python变量的本质:变量存储的不是值,是值的地址理解Python的"="表示的是指向关系案例:交换a,b的值,a=10,b=20a,b=20,10t0:a这块内存(也有id),......
  • Python基础 - 序列结构
    对内置的常用数据结构,列表,字典,元组,集合的基本点看书整理.有序序列:列表、元组、字符串无序序列:字典、集合可变序列:列表、字典、集合不可变......
  • Python基础 - 面向对象
    面向对象基础入门,理解概念为主,其妙用需要很长时间去领悟哦.引入Python既是面向过程,也能面向对象.初学来理解为啥要面向对象,不太可能,用处......
  • 【AI白身境】学AI必备的python基础
    今天是新专栏《AI白身境》的第三篇,所谓白身,就是什么都不会,还没有进入角色。上一篇给大家介绍了如何正确使用Linux,如何利用shell,vim,git这三大神器。相信大家也掌握的差不多了......
  • 【AI白身境】只会用Python?g++,CMake和Makefile了解一下
    今天是新专栏《AI白身境》的第六篇,所谓白身,就是什么都不会,还没有进入角色。对于大部分小白来说,因为python用的太爽,以致于或许都没有听说过CMake。python是脚本语言,而当前大......
  • 【Python进阶】带你使用Matplotlib进行可视化
    欢迎来到专栏《Python进阶》。在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件、数据的处理,Python各种好用的库如NumPy、Scipy、Matplotlib、Pandas的使用等等......
  • Python全栈工程师之从网页搭建入门到Flask全栈项目实战(1) - ES6标准入门和Flex布局
    1.简述1.什么是ES6?ES6,全称ECMAScript6.0,是JavaScript的下一个版本标准,2015年6月份发版。ES6的主要目的是为了解决ES5的先天不足。2.了解ES和JS之间的关系ES=......
  • Python3.7之后使用协程进行并发编程更加容易
    [本文出自天外归云的博客园]在python3.7之后,async和await关键字的使用变得更加容易。async和await总是成对出现,async定义协程任务,await等待协程任务完成。代码如下:imp......
  • python 运行错误收集
    目录global全局声明错误global全局声明错误SyntaxError:name'is_login'isusedpriortoglobaldeclaration解决办法:globalis_login放在ifis_login:的上面is_l......
  • 视频直播源码,python实现列表插入、查找、删除
    视频直播源码,python实现列表插入、查找、删除#列表的插入、查找、删除实现 classTestArray:  def__init__(self,capacity)->None:    #由于python的lis......