Python:搜索多个目录并获取最新文件,删除其他文件

时间:2017-09-19 14:11:56

标签: python

python的新手,非常感谢一点帮助。 我想通过10个目录并将每个目录中的最新文件复制回单个文件夹。每个目录中可能有多个文件。

我可以从每个目录中提取完整的列表,但不确定如何缩小范围。任何方向将不胜感激。 在STATES目录中将是每个州的目录(即CA,NY,FL,MI,GA)

**编辑是否有用,目录结构如下所示: ' / DAT /用户/状态/ CA /' ' / DAT /用户/状态/ NY /' ' / DAT /用户/状态/ MI /'

import glob
import os

data_dir = '/dat/users/states/*/'
file_dir_extension = os.path.join(data_dir, '*.csv')

for file_name in glob.glob(file_dir_extension):
    if file_name.endswith('.csv'):
        print (file_name)

1 个答案:

答案 0 :(得分:1)

您可以使用os.walk()代替glob.glob()来遍历所有文件夹。对于每个文件夹,您将获得其中的文件名列表。这可以使用os.path.getmtime()按日期排序。这将导致最新文件位于列表的开头。

弹出列表中的第一个元素并将其复制到目标文件夹。然后可以使用os.remove()删除列表中的其余元素,如下所示:

import os
import shutil

root = r'/src/folder/'
copy_to = r'/copy to/folder'

for dirpath, dirnames, filenames in os.walk(root):
    # Filter only csv files
    files = [file for file in filenames if os.path.splitext(file)[1].lower() == '.csv']
    # Sort list by file date
    files = sorted(files, key=lambda x: os.path.getmtime(os.path.join(dirpath, x)), reverse=True)

    if files:
        # Copy the newest file
        copy_me = files.pop(0)
        print("Copying '{}'".format(copy_me))
        shutil.copyfile(os.path.join(dirpath, copy_me), os.path.join(copy_to, copy_me))

        # Remove the remaining files
        for file in files:
            src = os.path.join(dirpath, file)
            print("Removing '{}'".format(src))
            #os.remove(src)

os.path.join()用于安全地将路径和文件名连接在一起。

注意:如果您的系统支持它,您可能需要使用以下内容:

os.stat(os.path.join(dirpath, x)).st_birthtime            

根据创建日期/时间进行排序。