【Python】获取指定目录下的文件夹和文件

【Python】获取指定目录下的文件夹和文件

1. 介绍

我们经常会有对文件做批量处理的需求,获取指定目录下的文件夹和文件(有时需要获取所有文件,即子目录下的文件也需要获取)。Python 中扫描目录有两种方法:

  • os.listdir()
  • os.walk()

2. 举例说明

建立项目框架如下:

在这里插入图片描述
其中,

  • test:项目文件夹名称,含有 aa子文件夹main.py
    • aa:文件夹,含有 bb子文件夹cc子文件夹 以及 一个 dd.txt文件
      • bb:文件夹,含有一个 txt 文件
        • ff.txt:txt文件
      • cc:空文件夹
      • dd.txt:txt文件夹
    • main.py:进行代码举例使用

2.1 os.listdir()

os.listdir() 方法用于返回指定的目录下包含的文件或子目录的名字的列表。

  • 这个列表以字母顺序。其得到的是仅当前路径下的文件名,不包括子目录中的文件;
  • 如果需要得到所有文件需要递归。 它也不包括 ‘.’ 和 ‘…’ 即使它在目录中。

2.1.1 API

import os
os.listdir(path)

2.1.2 main.py 代码如下,时

import os

def list_dir(file_dir):
    '''
        通过 listdir 得到的是仅当前路径下的文件名,不包括子目录中的文件,如果需要得到所有文件需要递归
    '''
    dir_list = os.listdir(file_dir)
    result_list = []
    for cur_file in dir_list:
        # 获取文件的绝对路径
        path = os.path.join(file_dir, cur_file)
        if os.path.isfile(path): # 判断是否是文件还是目录需要用绝对路径
            result_list.append(path)
        if os.path.isdir(path):
            result_list += list_dir(path) # 递归子目录
    return result_list

path = 'aa'
list1 = os.listdir(path)
list2 = list_dir(path)

print(list1)
print(list2)

输出如下:

list1: ['bb', 'cc', 'dd.txt', 'ee.jpg']
list2: ['aa/bb/ff.txt', 'aa/dd.txt', 'aa/ee.jpg']

2.2 os.walk()

os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。

2.2.1 API

import os
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

方法参数说明

  • top:要遍历的目录的路径
  • topdown:可选,如果为 True,则优先遍历 top 目录,以及 top 目录下的每一个子目录,否则优先遍历 top 的子目录,默认为 True
  • onerror: 可选, 需要一个 callable 对象,当 walk 异常时调用
  • followlinks:可选, 如果为 True,则会遍历目录下的快捷方式(linux 下是 symbolic link)实际所指的目录,默认为 False
  • args:包含那些没有 ‘-’ 或 ‘–’ 的参数列表

返回值: 三元组 (root, dirs, files)

  • root :所指的是当前正在遍历的目录的地址
  • dirs :当前文件夹中所有目录名字的 list (不包括子目录)
  • files :当前文件夹中所有的文件 (不包括子目录中的文件)

2.2.2 main.py 代码如下,时

import os

path = 'aa'
a, b, c = os.walk(path)

print(a)
print(b)
print(c)

输出如下:

a: ('aa', ['bb', 'cc'], ['dd.txt', 'ee.jpg'])
b: ('aa/bb', [], ['ff.txt'])
c: ('aa/cc', [], [])

2.2.3 main.py 代码如下,时

import os
path = 'aa'
for root, dirs, files in os.walk(path):
    for name in files:
        print(os.path.join(root, name))
    for name in dirs:
        print(os.path.join(root, name))

输出如下:

aa/dd.txt
aa/ee.jpg
aa/nn
aa/bb
aa/cc
aa/bb/ff.txt

3. 其他常用方法

  • os.path.splitext():分离文件名和扩展名
import os
file = "file_test.txt"
file_name = os.path.splitext(file)[0] # 输出:file_test
file_suffix = os.path.splitext(file)[1] # 输出:.txt
  • os.path.exists():判断文件或目录是否存在
  • os.path.isfile():判断是否是文件
  • os.path.isdir():判断是否是目录
  • os.path.dirname():获取当前文件所在的目录,即父目录
  • os.makedirs():创建多级目录
  • os.mkdir():创建单级目录
  • os.path.getsize():获取文件大小

猜你喜欢

转载自blog.csdn.net/qq_51392112/article/details/129567318