通过python将文件从一个目录传输到另一个目录

问题描述 投票:0回答:1

我正在尝试将多个文件从一个目录移动到另一个目录。如果文件以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目录的正确方法是什么。

python linux directory move transfer
1个回答
0
投票

当您已经成功运行脚本(或脚本的一部分)后,就会发生这种情况。该文件存在于目标目录中后,如果尝试替换它,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)
© www.soinside.com 2019 - 2024. All rights reserved.