如何获取以 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 folder
和 images 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")
我有一个结构如下的文件夹
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 folder
和 images 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")