【问题标题】:If number of files in folder less than x then copy more files to folder如果文件夹中的文件数小于 x,则将更多文件复制到文件夹
【发布时间】:2021-03-09 23:58:48
【问题描述】:

我有一个包含大约 100 万个文件的文件夹,需要分批将 300 个文件传输到暂存文件夹以上传到 S3。文件需要按照创建日期最旧 > 最新的顺序移动。

我创建了一个脚本,它可以完成我需要的所有事情,一次只做一个文件作为测试。现在我已经准备好批量做,我似乎碰壁了,因为我不知道如何一次做 300 个。

工作流程应该是这样的:

  1. 如果目标文件夹为空

  2. 在源文件夹中查找 300 个最旧的文件/如果使用循环则查找单个最旧的文件

  3. 将文件移动到目标文件夹

  4. 执行 S3 传输(删除目标中的所有文件 文件夹)

  5. 返回第 1 步

我宁愿一次做一批 300 个,但我找不到任何关于如何指定每个“批次”文件数量的信息,我认为有一个需要最旧的第一个的附加功能会使事情复杂化,所以我相信一个循环是有序的

下面的代码将一次将最旧的文件从源文件夹移动到目标文件夹 1

import os
import glob
import shutil

src = "Source Folder"
dst = "Destination Folder"

def oldest_file_in_tree(rootfolder, extension=".xml"):
    return min(
        (os.path.join(dirname, filename)
        for dirname, dirnames, filenames in os.walk(rootfolder)
        for filename in filenames
        if filename.endswith(extension)),
        key=lambda fn: os.stat(fn).st_mtime)

oldest_xml = oldest_file_in_tree("Source Folder", '.xml')
shutil.move(oldest_xml, dst)

我尝试了几种不同的循环/if 语句 - 它们似乎只复制一个文件然后完成,例如:

if files_in_dst <= 11:
    shutil.move(oldest_xml, dst)
dstCount = 0

for files in src:
    dstCount += 1
    shutil.move(oldest_xml, dst)
    if dstCount == 11:
        break
dstFolderCount = sum(len(files)for _, _, files in os.walk(dst))
while dstFolderCount < 11:
    oldest_xml = oldest_file_in_tree(Source Folder", '.xml')
    shutil.move(oldest_xml, dst)

我认为我缺少的步骤是如何真正让循环进行迭代,所以如果有任何阅读/建议 - 我全神贯注。

【问题讨论】:

  • 您上一个代码中的dstFolderCount 是什么?
  • 抱歉,遗漏了一些代码,我已经编辑了帖子。
  • 计算dstFolderCount 中文件数量的方式,它计算目标文件夹中的文件夹和子文件夹。目标文件夹中除了这些文件之外还有其他文件吗?
  • 不,它只有 xml 文件,一旦每批文件上传到 S3,它们就会从目标文件夹中删除,基本上每个周期都“空”
  • 您能否在上一个示例中将您的 while 语句替换为 while len(glob.glob1(dst,"*.xml")) &lt; 301:

标签: python-3.x shutil


【解决方案1】:

感谢@BijayRegmi

短答案是使用 Blob 计算目录中的文件,然后执行 while 循环。

while len(glob.glob1(Destination Folder,"*.xml")) < 5:
    try:
        #Insert Code Here#
    except(FileExistsError):
        print("File Exists")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    相关资源
    最近更新 更多