Python-应用os库(示例对文件夹和文件进行操作)

python的os模块,提供了访问多个操作系统的功能.它的子模块也提供了操作文件和目录以及处理路径的方法

os库基础知识:

1:os.path.getsize(file_name) 可以获取文件大小,即多少字节。

2:os.walk(文件夹地址),
返回一个含有三个元素的元组,即(root,dirs,files)。

其中,root是当前正在遍历的这个文件夹的本身的路径。
其中,dirs 是一个list(列表) ,内容是该文件夹中所有的目录(文件夹)的名字(不包括子目录)。
其中,files 同样是list(列表) , 内容是该文件夹中所有的文件(不包括子目录)。

3:os.listdir (path),返回当前路径下的文件夹与文件(不向下二级递归)。(列表的形式返回)

4:os.path.join(原来路径,要加的路径)
可以进行路径的连接.

5:os.path.isdir()和os.path.isfile()
可以分别判断其中的参数是文件夹还是文件.

6:os.getcwd()
返回当前路径。

7:os.path.split()
以元组的形式返回两个参数,一个是文件路径,一个是文件名加后缀.

8:os.path.splitext()
以元组的形式返回两个参数,一个是文件名,一个是文件名后缀.

9:os.rename()
可以修改文件的名字
第一个参数是文件的路径加文件名加后缀
第二参数是文件的路径加新文件名加后缀

示例:

import os

filename = 'E:A//apple.jpg'
newname = 'E:A///1.jpg'
os.rename(filename,newname)
print("更改好了!")

注意:

1.文件的路径名"E://A"要用双斜杠
2.“E://A//”+filename这里A的后面也要加上双斜杠


基本os库应用示例:

def test():
    project_path = 'D:\Code\python project'
    for root,dirs,files in os.walk(project_path):
        for name in files:
            print(os.path.join(root,name))
        for name in dirs:
            print(os.path.join(root,name))
  • os应用任务一:遍历指定文件夹的文件,获取文件的大小和格式
代码如下(有注释:)
import os
"""遍历指定文件夹文件,获取文件大小和格式"""

def get_size(project_path):
    fileList = os.listdir(project_path) #返回文件夹和文件路径
    for file_name in fileList:
        file_path = os.path.join(project_path,file_name)  # 合并路径,以获取具体文件的完整路径
        if "." in file_name:     #以点来判断文件名是否有后缀,也可以用os.path.splitext()加下标提取后缀
            file_format = file_name.split('.')[-1]  # 以点为标志进行字符串分割,返回列表,提取最后一个元素即为文件格式
        else:
            file_format = '无后缀'
        if os.path.isdir(file_path): #判断是属于文件夹
            print("目录中:\t%s是文件夹,进行递归查找结果如下:\n" % file_name)
            get_size(file_path)  #进入文件夹进行递归查找
        elif os.path.isfile(file_path):#判断是属于文件
            file_size = os.path.getsize(file_path)
            print("目录中:\t%s文件的大小为:%d\t格式为:%s\n" % (file_name, file_size,file_format))

if __name__ == "__main__":
    project_path = input("请输入您的目标文件夹的绝对路径: (如: D://Code//python project)\n")
    get_size(project_path)
    print("查找结束!")
  • os应用任务二:对文件大小进行排序,在对话窗口按文件大小顺序打印出文件名和对应的文件格式和文件大小
代码如下(有注释:)
import os
"""对上一步获取完指定文件夹的文件格式和大小基础上,按文件大小进行排序
   并打印出文件名和对应的文件格式和文件大小"""

dicts = {}  #创建空字典进行存储

def get_info(project_path):
    fileList = os.listdir(project_path)
    for file_name in fileList:
        file_path = os.path.join(project_path,file_name)  # 合并路径,以获取具体文件的完整路径
        if os.path.isfile(file_path):
            file_size = os.path.getsize(file_path)
        #添加信息到空字典中
        dicts[file_name] = file_size
    return  dicts

def sorted_list():
    dicts = get_info(project_path)
    sorted_result = sorted(dicts.items(), key=lambda x: x[1])  # 升序
    for x in sorted_result:
        file_name = x[0]
        if "." in file_name:     #以点来判断文件名是否有后缀
            file_format = file_name.split('.')[-1]  # 以点为标志进行字符串分割,返回列表,提取最后一个元素即为文件格式
        file_size = x[1]
        print("文件名:%s\t文件格式:.%s\t文件大小:%d字节\t"%(file_name,file_format,file_size,))

if __name__ == "__main__":
    project_path = input("请输入您的目标文件夹的绝对路径: (如: D://Code//Test_project)") 
    print("文件从小到大排列如下:")
    sorted_list()

  • os应用任务三:判断文件格式,按大小顺序输出是图片格式的文件名,并按大小顺序将图片重命名为123456789…

补充sorted和sort等函数知识点:

1: sorted() 函数对所有可迭代的对象进行排序操作。

2:sort()和sorted()的区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

3:sorted() 语法:
sorted(iterable, cmp=None, key=None, reverse=False),cmp参数key参数都要用lambda函数形式

4:sorted()参数说明:
iterable – 可迭代对象。

cmp – 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。

key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。

在这里插入图片描述

  • os应用任务三:判断文件格式,按大小顺序输出是图片格式的文件名,并按大小顺序将图片重命名为123456789…

代码如下(有注释:)

import os
"""在上一步根据文件大小排好序的基础上
   再输出图片格式的文件名,并按大小顺序将图片重命名为123456789"""

dicts = {}  #创建空字典进行存储最先获取到的信息
dicts2 = {} #创建空字典继续存储排序好的各个信息
photos = [] #创建空列表存储各个排序好的图片名字

#获取文件的大小信息
def get_info(project_path):
    #返回当前路径下的文件夹和文件(不是完整路径)
    fileList = os.listdir(project_path)
    for file_name in fileList:
        file_path = os.path.join(project_path,file_name)  # 合并路径,以获取具体文件的完整路径
        #判断此文件是文件而不是文件夹
        if os.path.isfile(file_path):#此函数参数需要传递完整路径
            #获取文件的字节大小,参数传递是完整路径
            file_size = os.path.getsize(file_path)
        #添加信息到空字典中
        dicts[file_name] = file_size
    return  dicts

#按文件大小对文件进行排序
def sorted_list():
    #获取存储的各个文件的字节大小信息
    dicts = get_info(project_path)
    #利用sorted函数,根据文件字节大小进行排序,以列表的形式返回的是排序好的(文件名字,文件大小)(元组)
    sorted_result = sorted(dicts.items(), key=lambda x: x[1])  # 升序,利用key选择迭代对象中的第二个元素
    for x in sorted_result:
        #获取排序好的文件名字
        file_name = x[0]
        # 获取排序好的文件大小
        file_size = x[1]
        # 添加排列好的信息到空字典中
        dicts2[file_name] = file_size
    return dicts2

#依照文件大小提取出图片文件并重命名图片文件(以jpg和png格式为例子)
def sorted_photo():
    #获取排序好了的文件的字节信息
    result = sorted_list()
    #按大小顺序输出是图片格式的文件名
    print("原始图片文件及文件名如下:")
    for x in result.items():
        file_name = x[0]
        file_size = x[1]
        #这里识别jpg格式
        if '.jpg' in x[0]:
            print("文件名:%s\t文件大小:%d" % (file_name, file_size))
            photos.append(file_name)
        # 这里识别png格式
        if '.png'in x[0]:
            print("文件名:%s\t文件大小:%d" % (file_name, file_size))
            photos.append(file_name)
    return photos

#将排序好的图片文件重命名
def rename_photo(project_path):
    #初始化i初值为1
    i = 1
    # 获取排序好了的图片文件名
    photos = sorted_photo()
    #图片文件重命名为123456789...
    for x in photos:
        #获取图片文件名
        file_name = x
        #图片文件后缀判断
        if '.jpg' in x:
            # 注意数字需要转字符串
            new_name = str(i)+'.jpg'
        if '.png' in x:
            # 注意数字需要转字符串
            new_name = str(i)+'.png'
        os.rename(project_path+"//"+file_name,project_path+"//"+new_name)
        #改变i值
        i+=1
    #打印结果
    print("现在各个图片名已更改!")

#主函数
if __name__ == "__main__":
    project_path = input("请输入您的目标文件夹的绝对路径: (如: D://Code//Test_project)(注意中间要用//连接)\n")
    rename_photo(project_path)

The End!!创作不易,欢迎点赞/评论!!欢迎关注个人公众号

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值