python-3.x - 如果文件夹中的文件数少于 x,则将更多文件复制到文件夹
问题描述
我有一个包含大约 100 万个文件的文件夹,需要将 300 个文件分批传输到暂存文件夹以上传到 S3。需要按照创建日期最旧 > 最新的顺序移动文件。
我创建了一个脚本,它可以做我需要的一切,一次只做一个文件作为测试。现在我准备好批量做,我似乎碰壁了,因为我不知道如何一次做 300 个。
工作流程应该是这样的:
如果目标文件夹为空
在源文件夹中查找 300 个最旧的文件/如果使用循环则查找单个最旧的文件
将文件移动到目标文件夹
执行 S3 传输(删除目标文件夹中的所有文件)
返回步骤 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)
我认为我缺少的步骤是如何真正让循环迭代,所以如果有任何阅读/建议 - 我全神贯注。
解决方案
感谢@BijayRegmi
简短的答案是使用 Blob 来计算目录中的文件,然后执行 while 循环。
while len(glob.glob1(Destination Folder,"*.xml")) < 5:
try:
#Insert Code Here#
except(FileExistsError):
print("File Exists")
推荐阅读
- java - 在进行批量保存操作时,最后一条记录未保存到存储库中
- python - 在请求会话中手动解决验证码
- html - 为什么父 div 底部有一个小的空行以及如何解决这个问题?
- java - 按升序将元素插入 LinkedList
- terraform - 在 terraform 中创建新集群后,我可以写一些东西来编辑 /.kube/config 文件吗?
- c++ - C++:模板参数列表中参数的类型/值不匹配
- reverse-engineering - 逆向工程python .exe,找不到字符串
- node.js - Mongoose $and 过滤器无法正确过滤
- encryption - 如何使用 sample-aes-ctr 加密解密视频
- docker - 如何在 Windows 操作系统的 docker 容器中开始开发