6

入力ファイルとターゲット ディレクトリがあるとします。入力ファイルがターゲット ディレクトリと同じハード ドライブ (またはパーティション) にあるかどうかを確認するにはどうすればよいですか?

私がやりたいのは、ファイルが別の場所にある場合はファイルをコピーすることですが、同じ場合は移動します。例えば:

target_directory = "/Volumes/externalDrive/something/"
input_foldername, input_filename = os.path.split(input_file)
if same_partition(input_foldername, target_directory):
    copy(input_file, target_directory)
else:
    move(input_file, target_directory)
4

2 に答える 2

13

C では、フィールドを使用stat()して比較しst_devます。Python ではos.stat、同じことを行う必要があります。

import os
def same_partition(f1, f2):
    return os.stat(f1).st_dev == os.stat(f2).st_dev
于 2008-10-30T10:54:11.937 に答える
3

もう 1 つの方法は、「許可よりも許しを求める方がよい」アプローチです。名前を変更してみて、それが失敗した場合は、適切なものをキャッチしOSErrorてコピーするアプローチを試してください。すなわち:

import errno
try:
    os.rename(source, dest):
except IOError, ex:
    if ex.errno == errno.EXDEV:
        # perform the copy instead.

これには、すべてのパーティションで st_dev が常に 0 である Windows でも機能するという利点があります。

単にコピーするのではなく、実際にソース ファイルをコピーしてから削除する (つまり、移動を実行する) 場合は、 shutil.move が既に目的を果たしていることに注意してください。

モジュール shutil の関数 move に関するヘルプ:

move(src, dst)
    ファイルまたはディレクトリを別の場所に再帰的に移動します。

    宛先が現在のファイルシステムにある場合は、単に使用します
    名前を変更します。そうでない場合は、src を dst にコピーしてから、src を削除します。
于 2008-10-30T13:21:02.843 に答える