Разница между shutil.copy2 (s, d) и shutil.move (s, d) - PullRequest
5 голосов
/ 05 августа 2011

Я прочитал документацию для shutil.move и copy2. Насколько я понимаю, Move просто вызывает функцию copy2, затем вызывает функцию удаления, а copy2 вызывает copy, а затем copystat. Это все имеет смысл, кроме случаев, когда я использую их, я нахожу интересную оговорку (я думаю) Если я использую функцию перемещения в файле, все метки времени в файле остаются неизменными, включая дату создания. Если я просто вызываю copy2 для файла, тогда дата создания становится текущим временем. Поскольку перемещение использует copy2, почему дата создания также не изменяется? Или документация упрощает это. Было бы неплохо, если бы у меня был скрипт для copy2, чтобы он также копировал оригинальную метку времени создания. Я работал с python всего несколько дней, поэтому я просто хочу знать, почему метка времени создания отличается между двумя вызовами функций. Я на Windows 7 64, если это имеет значение. Ты все заранее.

пример:

import os
import shutil
src = os.path.join(os.getcwd(), "copyme.txt")
src2 = os.path.join(os.getcwd(), "moveme.txt")
dst = os.path.join(os.getcwd(), "New Folder")
shutil.copy2(src, dst) #creation date changed
shutil.move(src2, dst) #creation date remains the same as original

Я не могу понять, почему это происходит ...

1 Ответ

5 голосов
/ 05 августа 2011

Из моего понимания документации shutil, shutil.copystat() не сохраняет дату создания, оно только сохраняет время последнего доступа и дату последнего изменения.

Кроме того, shutil.move() использует shutil.copy2(), за которым следует shutil.copystat(), только если источник и место назначения находятся в разных файловых системах, в противном случае будет использоваться функция os.rename(), которая просто перемещает файл в новое место без создания новый файл и сохраняет все атрибуты файла, включая дату создания. Вот почему вы замечаете другое поведение.

...