我正在尝试将多个文件从一个目录移动到另一个目录。如果文件以sample_list
中的值开头,则我尝试创建的功能应移动文件。我的问题是,有多个文件以sample_list
的值开头,这似乎导致了问题。
import shutil
import os
source = './train/'
dest1 = './test/'
files = [
'195_reg_6762_1540.npz',
'1369_reg_7652_-2532.npz',
'195_reg_1947_-484.npz',
'1336_reg_6209_1217.npz',
'1198_reg_3784_-934.npz',
'12_reg_3992_-10.npz',
'1369_reg_3214_-91.npz']
test_samples = [195, 1493, 409, 339, 12, 1336]
#Move files which begin with values in test_samples [edited orig post to fix typo]
for f in files:
for i in test_samples:
if (f.startswith(str(i))):
shutil.move(source+f, dest1)
引发错误:
File "/home/usr/anaconda3/lib/python3.7/shutil.py", line 564, in move
raise Error("Destination path '%s' already exists" % real_dst)
Error: Destination path '/home/usr/Documents/project/data/test/195_reg_1947_-484.npz' already exists
如果要移动的测试样本中有一个以上的文件,则总是失败。将以test_samples
中的值开头的文件从source
目录移动到target
目录的正确方法是什么。
当您已经成功运行脚本(或脚本的一部分)后,就会发生这种情况。该文件存在于目标目录中后,如果尝试替换它,shutil会引发异常。
请参见此修改,检查文件是否在目标目录中,如果存在,则将其删除并将其从原始目录移回(请注意,该文件必须在原始目录中再次存在)。 [您是要复制而不是移动?]
for f in files:
for i in test_samples:
if (f.startswith(str(i))):
if not os.path.exists(dest1+f):
shutil.move(source+f, dest1)
else:
os.remove(dest1+f)
shutil.move(source+f,dest1)