LINUX.ORG.RU

Помогите разобраться с shutil Python3

 


1

1

Уважаемые форумчане! Требуется ваша помощь!

Помогите пожалуйста разобраться с библиотекой Python3 shutil!

  • copyfileobj
  • copyfile
  • copymode
  • copystat
  • copy
  • copy2
  • copytree
  • ignore_patterns
  1. В чём разница между этими методами? Кратко если не трудно объясните в какой ситуации каждый применяется?
  2. Например не очень понятно как копируются метаданные без самого файла, куда именно? И наоборот файлы отдельно от метаданных, откуда тогда метаданные берутся?
  3. Если нужно обычное копирование файла, то что из этого использовать?

А что непонятно в офф документации: https://docs.python.org/3/library/shutil.html ?

Например не очень понятно как копируются метаданные без самого файла, куда именно? И наоборот файлы отдельно от метаданных, откуда тогда метаданные берутся?

Написано же в доке, что dst это файл которому ты присваиваешь те же флаги доступа (и т.п.), что и у src.

Если нужно обычное копирование файла, то что из этого использовать?

copyfile если у тебя есть есть пути до файлов и copyfileobj если у тебя есть открытый объект типа файл.

Norgat ★★★★★
()

метаданные — из фаловой системы.

как они копируются: сначало читаются исходные (через системный вызов) — затем записываются то что прочиталось (через другой системный вызов).

как копируются и откуда берутся —

вот смотри тут:

https://github.com/python/cpython/blob/v3.6.2/Lib/shutil.py#L173

https://github.com/python/cpython/blob/v3.6.2/Modules/posixmodule.c#L2712

думаю должно быть ясно

user_id_68054 ★★★★★
()
Ответ на: комментарий от user_id_68054

думаю должно быть ясно

Извините, но яснее ничуть не стало

tonchikp
() автор топика

Прошу объяснить на русском и кратко, уж совсем базовое я всё-таки знаю. Насколько я знаю файл и его метаданные (надеюсь я правильно понимаю это слово, это всякие там права доступа, имя файла, 3 временных отметки (дата модификации, создания и доступа), inode и ещё если что-то забыл поправьте меня) тесно связаны меж собой, как тело и голова. Мы скопировали тело - голова откуда возьмётся? И немного неясно в какой ситуации это нужно. Также и наоборот копирование головы без тела, откуда тело возьмётся? Ссылки на документацию это конечно хорошо, но прежде чем задать тут вопрос я ищу ответ в сети, и если я задал вопрос значит после прочтения найденного не нашёл ответа

tonchikp
() автор топика
Ответ на: комментарий от tonchikp

Ща все всё бросят и начнут на чистейщом литературном языке разъяснять официальные доки васяну, который и так не в состоянии их понять.

BigAlex ★★★
()
Ответ на: комментарий от BigAlex

Золотые слова! Вот тех товарищей, которым тяжело объяснить «Васяну» в двух словах, прошу пройти мимо данной темы. Я не просил мне разъяснять что-либо, читайте тему внимательно пожалуйста

tonchikp
() автор топика
Ответ на: комментарий от Deleted

Предыдущее сообщение значит и к Вам относится

tonchikp
() автор топика
Ответ на: комментарий от ism

Просто Читай доку, по питону есть и на русском

Ещё раз повторяю, я ЧИТАЛ материалы на русском прежде чем задать вопрос, но после прочтения остались моменты которые вызвали неясность

tonchikp
() автор топика
Ответ на: комментарий от tonchikp

Есть отличный способ все узнать, ставите pycharm community и дебажите там скрипт, смотрите на отдачу функций

ism ★★★
()
Ответ на: комментарий от ism

Ребят, что б вам также помогали как вы мне.

Мне лично не трудно было бы поделиться знаниями в той области в которой я соображаю, но вам видимо трудно или вы просто издеваетесь.

tonchikp
() автор топика
Ответ на: комментарий от tonchikp

Ребят, что б вам также помогали как вы мне.

ды не. ism отличный способ предложил. ток можно обойтись и без pycharm — просто в консоле повыполнять

user_id_68054 ★★★★★
()
Ответ на: комментарий от user_id_68054

Вот тут уже ближе к делу! Если

но не те которые исходные

тогда какие? Какие метаданные в результате будут?

tonchikp
() автор топика
Ответ на: комментарий от user_id_68054

ды не. ism отличный способ предложил

Отличный для убивания времени, но у меня времени не много, мне ещё полно работы нужно сделать. Если б времени было полно, тогда другое дело

tonchikp
() автор топика
Ответ на: комментарий от tonchikp

Программист должен уметь выживать в гугле :) спрашивать на форуме очевидные вещи прописанные в документации и даже имеющие примеры кода - дурной тон

ism ★★★
()
Ответ на: комментарий от tonchikp

Очень часто для понимания работы функции документации недостаточно, поможет только дебаг по факту, например copymode в разных осях может вести себя по разному

ism ★★★
()
Последнее исправление: ism (всего исправлений: 7)
Ответ на: комментарий от ism

Поймите меня правильно! Я не спрашиваю то что написано в русской документации, я это прочёл, но остались вопросы. Я не прошу пересказывать документацию от и до, мне нужно выяснить лишь пару моментов.

Самое обидное то, что можно было написать пару слов по теме и вопрос был бы решён, но нет, вы выбираете отправку к английской документации, предлагаете исследовать в ситуации когда времени мало. Если вы знаете лучше материал, значит вы можете легко его переработать и выдать ответ. Ну не знаю, лично у меня так. Если я что-то знаю, то помогу, мне не трудно

Я отчасти понимаю когда отсылают к документации когда человек запрашивает большой материал или в документации есть ответ на родном языке

tonchikp
() автор топика
Ответ на: комментарий от tonchikp

предлагаете исследовать в ситуации когда времени мало.

Точно мало времени? Ты сутки обижаешься на попытки отправить тебя читать документацию, когда тебе надо было бы пару часов.

vvn_black ★★★★★
()
Ответ на: комментарий от vvn_black

Точно мало времени?

Точно! Уж поверьте! Если б документация могла бы для меня дать ответ, я бы тут вопрос не задавал и не ждал бы ответа

tonchikp
() автор топика
Ответ на: комментарий от tonchikp

Какие метаданные в результате будут?

какие-то по умолчнаию, в соответствии текущим окружением (например смотри какое значение umask унаследовано текущим процессом http://man7.org/linux/man-pages/man2/umask.2.html ).. ну дата изменения — выставится из текущий даты. владелец файла — пользователь от которого процесс запущен. какие там ещё интересуют тебя мета данные?

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 1)
Ответ на: комментарий от user_id_68054

Огромное спасибо за ответ по теме! Дата создания получается будет равна дате изменения?

А разницу между этими методами не объясните?

tonchikp
() автор топика
Ответ на: комментарий от tonchikp

Васян, тебе что, каждый метод объяснять ? Пойди в сорс либы и посмотри что делает тот или иной метод.

anonymous
()
Ответ на: комментарий от tonchikp

Shutil.copyfileobj (fsrc, fdst [, length]) Скопируйте содержимое файлового объекта fsrc в файл-подобный объект fdst. Целая длина, если задана, является размером буфера. В частности, значение отрицательной длины означает копирование данных без циклирования по исходным данным в кусках; По умолчанию данные считываются в кусках, чтобы избежать неконтролируемого потребления памяти. Обратите внимание: если текущая позиция файла объекта fsrc не равна 0, будет скопировано только содержимое из текущей позиции файла в конец файла.

Благодари гугл переводчик, а не меня, если что.

anonymous
()
Ответ на: комментарий от anonymous

Поставлю Гуглу лайк от меня и от тебя :)

tonchikp
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.