shutil只移动一个文件,而不是目录中的多个文件



我写了一段代码来移动包含子字符串的文件

import os
import shutil
def move():
path = os.getcwd()
shutil.rmtree('Animals')
firstfolder = 'Animals'
if not os.path.isdir(firstfolder):
os.mkdir('Animals')
for file in os.listdir():
Buffalo = '1837'
donkey = '6104'
Chimpanzee = '9731'
cat = '2905'
rat = '6648'
sheep = '3128'
lizard = '3053'
insect = '2681'
dog = '3901'
#Buffalo
if Buffalo in file:
secondfolder = 'Animals/Buffalo'
thirdfolder = 'Animals/Buffalo/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#donkey
if donkey in file:
secondfolder = 'Animals/donkey'
thirdfolder = 'Animals/donkey/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#Chimpanzee
if Chimpanzee in file:
secondfolder = 'Animals/Chimpanzee'
thirdfolder = 'Animals/Chimpanzee/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#cat
if cat in file:
secondfolder = 'Animals/cat'
thirdfolder = 'Animals/cat/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#rat
if rat in file:
secondfolder = 'Animals/rat'
thirdfolder = 'Animals/rat/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#sheep
if sheep in file:
secondfolder = 'Animals/sheep'
thirdfolder = 'Animals/sheep/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#lizard
if lizard in file:
secondfolder = 'Animals/lizard'
thirdfolder = 'Animals/lizard/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#insect
if insect in file:
secondfolder = 'Animals/insect'
thirdfolder = 'Animals/insect/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#dog
if dog in file:
secondfolder = 'Animals/dog'
thirdfolder = 'Animals/dog/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)

move()

在我的当前工作目录中,我有这些文件:1): - 2905 r20.wav2): - 5 fm2905.wav3):——nso2905.wav4): 1 sny2905wn3i56.wav

当我运行代码时,它只移动最后一个文件1sny2905wn3i56.wav。它没有移动所有包含2905的文件。它应该移动所有4个文件。但我不知道为什么它只移动最后一个文件。当我移动最后一个文件后再次运行代码时,它正在移动第3个文件并删除已移动的第4个文件。当我再次运行代码时,它正在删除第三个文件并移动第二个文件,等等…

如何解决这个问题?

Edit:
你可以像下面这样优化代码。
注意使用os。路径(更方便、更智能、更清晰):

animals = {}
animals["Buffalo"] = '1837'
animals["donkey"] = '6104'
animals["Chimpanzee"] = '9731'
animals["cat"] = '2905'
animals["rat"] = '6648'
animals["sheep"] = '3128'
animals["lizard"] = '3053'
animals["insect"] = '2681'
animals["dog"] = '3901'
wd_path = os.getcwd()
animals_path = os.path.join(wd_path, "Animals")
if not os.path.isdir(firstfolder):
os.mkdir('Animals')
for file in os.listdir(animals_path):
file_path = os.path.join(animals_path, file)
for animal, id in animals.items():
if id in file_path:
secondfolder = os.path.join(animals_path, animal)
thirdfolder = os.path.join(secondfolder, "testfolder")
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.copy(file_path, thirdfolder)

相关内容

最新更新