跳至主要內容

Python迭代遍历文件夹

yczha小于 1 分钟pythonpython遍历文件

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