【问题标题】:Transfering files from one directory to another via python通过python将文件从一个目录传输到另一个目录
【发布时间】:2020-09-02 18:51:14
【问题描述】:

我正在尝试将多个文件从一个目录移动到另一个目录。 如果文件以sample_list 中的值开头,我尝试创建的函数应该会移动文件。我的问题是有多个文件以sample_list 中的值开头,这似乎导致了shutil 的问题。

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】:

    当您已经成功运行脚本(或其中的一部分)时会发生这种情况。一旦文件存在于目标目录中,如果您尝试替换它,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)
    

    【讨论】:

    • 感谢您的回复。您能否澄清“必须在原始目录中再次存在”的意思?运行您给定的代码会得到 https://pastebin.com/EanZDN4L 。不,我的目标是将文件从源传输到dest1,传输的文件应该只存在于dest1。
    • 这正是我的意思。所以这个脚本正在将文件从源移动到 dest1。一旦您成功运行此脚本一次,这些文件就不再存在于源代码中。如果您将文件重新复制到源但不从 dest1 删除文件并运行原始脚本,您将收到错误消息,因为文件已被移动并存在于 dest1 中。
    • 要明白我的意思,使用我提供的代码并从源目录中的所有 7 个文件开始。尝试运行脚本。它应该成功运行。现在,将所有 7 个文件的副本放回源目录(但将移动文件的副本保留在 dest1 目录中)并尝试运行您的脚本。您将再次收到该错误,因为文件已存在于 dest1 中。现在尝试运行我的脚本。您将看到脚本成功完成,因为它会在再次移动文件之前检查文件是否存在。
    猜你喜欢
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多