根据创建日期和文件夹名移动文件到文件夹 Python

问题描述 投票:0回答:1

我是一个安静的Python新手,但我有一个非常有趣的案例,可能会为我们大家提供一些学习的东西。我想做以下的事情。我在桌面上创建了 3 个文件夹 (Source, Destination 和 Archive)。所有这 3 个文件夹都包含相同的 3 个子文件夹(A、B 和 C)。每隔一段时间,Source 中的 3 个子文件夹就会被文件填满。Destination和Archive是空的(目前)。

现在我想做一个文件管理系统,它在每次运行代码时都会做以下工作。

  1. Python 检查 Source 中每个子文件夹 (A,B,C),有多少文件存在。如果Source中的子文件夹(A,B,C)中至少有一个文件存在,那么。

只有源文件中的3个子文件夹(A,B,C)中最后创建的文件才会被移动到目的地的3个子文件夹(A,B,C)中。这意味着每次我运行代码时,Source中子文件夹A中的最新文件将被移动到Destination中的子文件夹A中(B和C也是如此)。然而,只有当文件至少有5分钟的历史时,才会进行移动。因此,如果一个文件是在1分钟前创建的,它就不会移动。

如果还有剩余的文件(不是最后创建的),那么它将被移动到存档的子文件夹(A,B,C)。

请注意,每次移动一个文件时,它都必须放在与之前位置相同名称的子文件夹中。所以子文件夹A中的文件永远不能被移动到子文件夹B中。

这是我现在的代码,但我得到无效语法。这段代码可能不完整。

from datetime import datetime,timedelta
import shutil, os

#Creating Source, Destination and Archive paths.
source = r'c:\data\AS\Desktop\Source'
destination = r'c:\data\AS\Desktop\Destination'
archive = r'c:\data\AS\Desktop\Archive'

mod_time = timedelta(minutes=5)
now = datetime.now()
before = now - mod_time

for root, dirs, files in os.walk(source):
   for file in dirs:
       if file > before:
           shutil.move(file, destination)
        else file:
            shutil.move(file, destination)
python file file-handling shutil
1个回答
0
投票

好吧,我只是一个初学者,但这是我对你的问题的尝试。

import shutil, os
import time
#Creating Source, Destination and Archive paths.
source = r'C:\python\here\source'
destination = r'C:\python\here\destination'
archive = r'C:\python\here\archive'

#Current time in seconds
current_time=time.time()

#First os.walk for the source folder itself
for root, dirs, files in os.walk(source):
    for folder in dirs:
        subdir=root+'\\'+folder
        #second os.walk for each folder in the source folder (A, B, and C)
        for subroot, subdirs, subfiles in os.walk(subdir):
            for file in subfiles:
                filePath=subroot+'\\'+file
                #Gets the file descriptor and stores it in fileStat
                fileStat = os.stat(filePath)
                #st_ctime is the files creation time.
                #current time in seconds - file creation would be the difference 
                #between the current time and the file creation time.
                #Divide by 60 to convert that to minutes.
                ######################################
                ##If time passed greater than 5 minutes, send to a matching folder in destination
                if ((current_time-fileStat.st_ctime)/60) > 5: 
                    shutil.move(filePath,destination+'\\'+folder)
                else:
                    shutil.move(filePath,archive+'\\'+folder)

注意: 在每个文件夹的源头,目的地,和存档 我创建了子文件夹A,B和C。

© www.soinside.com 2019 - 2024. All rights reserved.