如何获取以 python 中的数字结尾的文件夹名称

how to get folder name that ends with a number in python

我有一个结构如下的文件夹

post
-----1
------10am
-----------images
-----2
-------10am
-----------images
-----3
------10am
-----------images

此文件夹最多有 31 个,具有相同的子文件夹“10am”,里面是另一个文件夹 'images'

在另一个文件夹中,我有我需要根据 python 中的文件夹名称复制的所有图像和 .txt 文件

所以我现在要做的就是复制 'postam\images' 内的 '2.jpg' 和 '2.txt' 里面 ''postam' 等等

到目前为止,这是我的代码:

import os,shutil

sampleFiles = r"\practice image and text"
destination = r"\posts"
time = '10am'

sample = os.listdir(sampleFiles)
#  sample = ['10.jpg', '10.txt', '11.jpg', '11.txt', '13.png', '13.txt', '16.jpg', '16.txt', '17.jpg', '17.txt', '18.jpg', '18.txt', '2.jpg', '2.txt', '20.jpg', '20.txt', '23.jpg', '23.txt', '24.jpg', '24.txt', '25.jpg', '25.txt', '27.jpg', '27.txt', '3.jpg', '3.txt','4.jpg', '4.txt', '5.jpg', '5.txt', '6.jpg', '6.txt', '9.jpg', '9.txt']


for root, dirs, files in os.walk(destination):
  for folderName in dirs:
  #get root + foldername
  rootWithFolder = os.path.join(root, folderName)

  #get path to date
  pathToDate = rootWithFolder.endswith(int(folderName)) # how to get the number?

  # get path to image folders
  if rootWithFolder.endswith('images'):
     pathToImage = rootWithFolder

  #copy .jpg files to pathToImage
  shutil.copy(sampleFiles + '\' + str(pathToDate) + '.jpg'   , pathToImage) #not the most elegant way

  #copy .txt files to pathToDate
  shutil.copy(sampleFiles + '\' + str(pathToDate) + '.txt'   , pathToDate + '\' + 'time') #not the most elegant way

在我的代码中,我卡在如何获取 pathToDate 所以我可以根据文件夹的名称复制它,

我试过这样使用 def

def allfiles(list):
 for i in range(len(list)):
  return list[i] # returns only the first value of the list
  # print(list[i]) #but this one returns all the value of the list

 allfiles(sample)

但它只有 returns 列表的 1 个实例。

我的问题是,如何获取名为 number 的文件夹并忽略 10am folderimages folder

strings

或者有更好的方法吗?谢谢

如果您仍在寻找解决方案,这里有一个建议...我会反过来:

from pathlib import Path
from shutil import copy

sample_folder = Path("practice image and text")
dest_folder = Path("posts")

for file in sample_folder.glob("*.*"):
    number, suffix = file.name.split(".")
    if suffix == "txt":
        copy(file, dest_folder / number / "10am")
    else:
        copy(file, dest_folder / number / "10am" / "images")