我们经常会有对文件做批量处理的需求,获取指定目录下的文件夹和文件(有时需要获取所有文件,即子目录下的文件也需要获取)。Python 中扫描目录有两种方法:
建立项目框架如下:
os.listdir() 方法用于返回指定的目录下包含的文件或子目录的名字的列表。
import os
os.listdir(path)
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']
os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。
import os
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
方法参数说明:
返回值: 三元组 (root, dirs, files)
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', [], [])
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
import os
file = "file_test.txt"
file_name = os.path.splitext(file)[0] # 输出:file_test
file_suffix = os.path.splitext(file)[1] # 输出:.txt