Python迭代遍历文件夹
小于 1 分钟
Python迭代遍历文件夹内的所有文件
Python迭代遍历文件夹内的所有文件
使用Python自带的walk
函数:
import os
def search_files(file_dir, file_types):
file_list = []
for dirpath, dirnames, filenames in os.walk(file_dir):
for file in filenames:
path = os.path.join(dirpath, file)
if os.path.isfile(path):
for file_type in file_types:
if os.path.splitext(path)[1] == file_type:
file_list.append(path)
return file_list
例子:以下给出一个例子,实现查找某目录下所有图片文件并拷贝到新地址:
# 遍历文件夹寻找图片文件
import os
import shutil
import sys
def search_files(file_dir, file_types):
file_list = []
for dirpath, dirnames, filenames in os.walk(file_dir):
for file in filenames:
path = os.path.join(dirpath, file)
if os.path.isfile(path):
for file_type in file_types:
if os.path.splitext(path)[1] == file_type:
file_list.append(path)
return file_list
if __name__ == "__main__":
FILE_DIR = sys.argv[1]
DST_DIR = sys.argv[2]
FILE_TYPES = ['.jpg', '.JPG', '.png', '.PNG', '.gif', '.bmp', '.BMP', '.jpeg']
print('Searching in dir:', FILE_DIR)
files = search_files(FILE_DIR, FILE_TYPES)
print('Find total {} files.'.format(len(files)))
if not os.path.isdir(DST_DIR):
os.mkdir(DST_DIR)
print('make dir:', DST_DIR)
for i, file in enumerate(files):
if i % 100 == 0:
print('Copying file:{}/{} {}'.format(i + 1, len(files), file))
if os.path.isfile(os.path.join(DST_DIR, os.path.basename(file))):
n = 1
while os.path.join(DST_DIR, str(n)+'_'+os.path.basename(file)):
n += 1
shutil.copy(file,os.path.join(DST_DIR, str(n)+'_'+os.path.basename(file)))
else:
shutil.copy(file,os.path.join(DST_DIR,os.path.basename(file)))
用法示例:
python3 copy_img.py ./source_dir ./dst_dir