子目录中的 python 文件路径不正确

使用Python 3.7 | WIN10


我读过很多关于处理 python 中的路径的文章。尝试使用一个小脚本将所有文件和子目录文件按上次修改日期排序到文件夹中。


到目前为止,它的工作原理都是为了一个问题,当获取子目录时,它会以 \ 开头返回,从而生成最终的目录字符串 base_dir/\subdir。


这意味着第一组文件可以正常复制,但子目录中的任何内容都会失败。


想要弄清楚如何阻止这种情况发生,我感到头疼。希望在屏幕中断后我能弄清楚,但以防万一,如果这里有任何向导可以提供帮助,我将不胜感激。


代码:


import os

import time

import datetime

import shutil

from typing import List, Tuple



SORT_DIR = r'to_sort/'



def date_from_seconds(file_stats):

    """

    Takes an os.stats variable and return a date

    Using the seconds elapsed since last modification

    """

    

    seconds = time.ctime(file_stats.st_mtime)

    date_filter = datetime.datetime.strptime(seconds, '%a %b %d %H:%M:%S %Y')

    date_to_return = f'{date_filter.day}-{date_filter.month}-{date_filter.year}'

    

    return date_to_return



def sort_files(path_directory: str, file_list: List[Tuple]):

    """

    Lists the files in the sort directory

    Uses recursion to obtain files from subdirectories

    Copies files to a directory named according to their last modified date

    """


    content_dir: List[str] = os.listdir(path_directory)


    for filename in content_dir:

        path_file = os.sep.join([path_directory, filename])

        if os.path.isdir(path_file):

            sort_files(path_file, file_list)

        else:

            try:

                stats = os.stat(path_file)

                date = date_from_seconds(stats)

                file_list.append((path_directory, filename, date))

                os.makedirs(date, exist_ok=True)

                print(f'{path_directory}{filename}')

                shutil.copy(f'{path_directory}{filename}', f'{date}/{filename}')

            except Exception as _err:

                print(_err)

                continue



files: List[Tuple] = []

sort_files(SORT_DIR, files)

print(files)



天涯尽头无女友
浏览 165回答 1
1回答

蓝山帝景

您在什么操作系统上运行?我看到你正在将你的路径与:path_file = os.sep.join([path_directory, filename])如果您使用的是 Windows,则这是错误的。为了使其正常工作,您可以使用path_file = os.path.join(path_directory, filename)2、您自己进行扫描有什么原因吗?您可以用于os.walk获取从给定根路径开始的所有文件/目录:import osSORT_DIR = 'to_sort'for data in os.walk(SORT_DIR): # where to start searching    dir_path, folders, files = data    # Now do whatever you want with the `files` variable
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python