Разница между Shutil.copy2(s,d) и Shutil.Move(s,d)

Я прочитал документацию, предоставленную для Shutil.move и copy2. Насколько я понимаю, move просто вызывает функцию copy2, затем вызывает функцию удаления, в то время как copy2 вызывает copy, а затем copystat. Все это имеет смысл, за исключением того, что когда я их использую, я нахожу интересное предостережение (я думаю). Если я использую функцию перемещения в файле, все временные метки в файле остаются прежними, включая дату создания. Если я просто вызову copy2 для файла, то дата создания станет текущим временем. Поскольку при перемещении используется копия2, почему дата создания также не изменяется? Или документация слишком упрощает это. Было бы неплохо, если бы сценарий, который у меня есть для 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

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


person user880455    schedule 05.08.2011    source источник


Ответы (1)


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

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

person mdeous    schedule 05.08.2011