2

ファイル (ターゲット フォルダー内) を、コンピューター上の別のディレクトリにある対応するソース フォルダー (ソースと同じフォルダー構造を持つ) にコピーするプロセスを自動化したいと考えていました...

Python の shutil.copytree を使用しようとしましたが、しかし、それはすべてのターゲットフォルダーをソースフォルダーにコピーし、Pythonのドキュメントには「dstで指定された宛先ディレクトリはまだ存在してはならない」と書かれています(私の場合、これはルールを破っています)。だから私がやりたかったのは、ソースファイルとターゲットファイルが同じフォルダーにとどまるように、ターゲットファイルのみを対応するフォルダーにコピーすることです... Pythonを使用して行うことは可能ですか?

ここで、質問にスクリーンショットを添付して、私の意味をさらに説明しました。

手伝ってくれてどうもありがとう!それまでの間、私もそれについてもっと研究しようと思います!

ここに画像の説明を入力

4

2 に答える 2

2

shutil.copytreeこれは、ディレクトリを作成しない (os.makedirs呼び出しを削除した) 変更されたバージョンです。

import os
from shutil import Error, WindowsError, copy2, copystat

def copytree(src, dst, symlinks=False, ignore=None):
    names = os.listdir(src)
    if ignore is not None:
        ignored_names = ignore(src, names)
    else:
        ignored_names = set()

    # os.makedirs(dst)
    errors = []
    for name in names:
        if name in ignored_names:
            continue
        srcname = os.path.join(src, name)
        dstname = os.path.join(dst, name)
        try:
            if symlinks and os.path.islink(srcname):
                linkto = os.readlink(srcname)
                os.symlink(linkto, dstname)
            elif os.path.isdir(srcname):
                copytree(srcname, dstname, symlinks, ignore)
            else:
                # Will raise a SpecialFileError for unsupported file types
                copy2(srcname, dstname)
        # catch the Error from the recursive copytree so that we can
        # continue with other files
        except Error, err:
            errors.extend(err.args[0])
        except EnvironmentError, why:
            errors.append((srcname, dstname, str(why)))
    try:
        copystat(src, dst)
    except OSError, why:
        if WindowsError is not None and isinstance(why, WindowsError):
            # Copying file access times may fail on Windows
            pass
        else:
            errors.append((src, dst, str(why)))
    if errors:
        raise Error, errors

を使用してmock(またはunittest.mockPython 3.x で)、Mock オブジェクトos.makedirsに置き換えることで一時的に無効にすることができます (「 」を参照)。os.makedirsunittest.mock.patch

from shutil import copytree
import mock  # import unittest.mock as mock   in Python 3.x

with mock.patch('os.makedirs'):
    copytree('PlaceB', 'PlaceA')
于 2015-12-05T05:42:51.613 に答える