Python shutil
Python shutil модулът позволява на разработчика да използва файлови обекти много лесно и без да навлиза в по-дълбоки подробности за това как работят нещата под завивките. Този модул основно абстрахира семантиката на ниско ниво на създаване и управление на файлови обекти, като ги почиства, след като е завършено, и ни позволява да се съсредоточим върху бизнес логиката на приложението. Тук ще видим много примери, нека започнем.
Примери с Python shutil модул
Ще проучим различни примери, демонстриращи използването на Python шутил модул тук.
Копиране на файл
С копиращ файл () функция в шутил модул, можем да направим точно копие на съществуващ файл навсякъде в машината. Нека да разгледаме примерна програма, за да покажем как това може да се направи:
внос osвнос shutil
file_directory = './ Файлове '
print ('Файлове преди:', os.listdir (file_directory))
шутил.copyfile ('./ Файлове / здравей.текст', './ Files / hello_again.текст')
print ('Файлове след:', os.listdir (директория_файл))
Току-що копирахме файл, който съществува в дадената директория, за да клонираме файла в същата директория. Ето какво получаваме обратно с тази команда:
Копиране на файл на Python shutil
Хубавото на тази функция е, че споменатата функция приема и като вход име на новия файл, който ще бъде създаден.
Копиране на файлове в друга директория
Възможно е да копирате файл в нова директория с shutil's копие() функция. Нека да го разгледаме в действие:
внос osвнос shutil
print ('Създаване на нова директория.')
операционна система.mkdir ('LinuxHint')
print ('Файлове преди:', os.listdir ('LinuxHint'))
шутил.копие('./ Файлове / здравей.txt ',' LinuxHint ')
print ('Файлове след:', os.listdir ('LinuxHint'))
Нека видим изхода за тази команда:
Копиране на файл в нова директория
Имайте предвид, че когато даден файл се копира с помощта на копие() функция, разрешенията за файла също са клонирани но метаданните на файла не се копират. Това означава, че когато проверявате кога е създаден този файл, той ще показва свежото време, когато сте изпълнили този скрипт.
Копиране на файл с метаданни
В последния раздел видяхме как можем да направим копие на файла. Ами ако искате да направите точен клонинг на файл, който включва клониране на метаданните му, както и когато файлът е създаден и т.н. Това също е възможно, но това може да не работи на базирана на POSIX система. Нека разгледаме пример за това как това може да се направи:
внос osвнос shutil
време за импортиране
new_directory = 'LinuxHint'
src_file = './ Файлове / здравей.текст'
dest_file = './ LinuxHint / здравей.текст'
def file_metadata (файл):
stat_info = os.статистика (файл)
print ('Mode:', oct (stat_info.st_mode))
print ('Създаден:', време.ctime (stat_info.st_ctime))
print ('Достъп:', време.ctime (stat_info.st_atime))
print ('Променено:', време.ctime (stat_info.st_mtime))
операционна система.mkdir (нова_директория)
print ('Метаданни за изходния файл:')
file_metadata (src_file)
шутил.copy2 (src_file, new_directory)
print ('Метаданни за целевия файл:')
file_metadata (dest_file)
Ето какво получаваме обратно с тази команда, когато стартираме това на базирана на POSIX система (метаданните не са клонирани напълно):
Копиране на файл с метаданни
На системи, които не са базирани на POSIX, дори създаденото и достъпно време би било точно съвпадащо.
Клониране на пълна директория
В последния раздел видяхме как можем да направим копие на файла. Тук ще видим как можем да клонираме пълна директория рекурсивно. Това означава, че ако в директорията, която искаме да клонираме, съществува друга директория, те също ще бъдат клонирани.
внос pprintвнос shutil
внос os
src_directory = './ Файлове '
dest_directory = './ LinuxHint '
шутил.copytree (src_directory, dest_directory)
print ('Съдържание на източника:')
отпечатък.pprint (os.listdir (src_directory))
print ('Съдържание на дестинацията:')
отпечатък.pprint (os.listdir (dest_directory))
Нека видим изхода за тази команда:
Дублиране на директория
Имайте предвид, че директорията, която предаваме на copytree (), функционира като целевата директория не трябва да съществува преди да стартираме тази програма.
Изтриване на директория
Изтриването на директория е много лесно с rmtree () функция в модула. Нека видим тази функция в действие тук:
внос pprintвнос shutil
внос os
delete_directory = 'LinuxHint'
current_directory = '.'
print ('Съдържание преди премахване:')
отпечатък.pprint (os.listdir (текуща_директория))
шутил.rmtree (изтриване_директория)
print ('Съдържание след премахване:')
отпечатък.pprint (os.listdir (текуща_директория))
След стартиране на скрипта, LinuxHint директория се изтрива заедно със съдържанието. Ето какво получаваме обратно с тази команда:
Изтриване на директория
Намиране на файлове
Ако искате да намерите файл, който присъства на променливата PATH на вашата машина, можем да използваме който() функция за намиране на този файл по име. Нека разгледаме демонстрационен пример за тази функция:
внос shutilпечат (shutil.which ('bsondump'))
печат (shutil.which ('no-file-found'))
Ето какво получаваме обратно с тази команда:
Намерете файл в PATH
Мониторинг на пространството на файловата система
С модула shutil имаме функция disk_usage (), чрез която можем да получим и информация за дисковото пространство за нашата машина. Нека да разгледаме пример, който показва тези данни по разбираем за човека начин:
внос shutiltotal_b, used_b, free_b = shutil.disk_usage ('.')
gb = 10 ** 9 # GB == гигабайт
print ('Общо: : 6.2f GB '.формат (общо_b / gb))
print ('Използвано: : 6.2f GB '.формат (използван_b / gb))
print ('Безплатно: : 6.2f GB '.формат (безплатно_b / gb))
Ето какво получаваме обратно с тази команда:
Намиране на пространство на файловата система
Архивиране на директории
Като последен пример ще видим как можем да архивираме директория shutil модул make_archive () функция. Нека да разгледаме примерната програма:
внос shutilвнос os
archive_directory = \
операционна система.път.разширител (os.път.присъединете се ('destination-directory-path', 'linuxhint'))
root_dir = os.път.разширител (os.път.присъединете се ('~', '.ssh '))
шутил.make_archive (archive_directory, 'gztar', root_dir)
Ето какво получаваме обратно с тази команда:
Директория за архивиране
Ако деархивирате TAR файла и погледнете, той ще съдържа всички .ssh файлове с директории в него.
Заключение
В този урок разгледахме как можем лесно да управляваме файлови обекти с файлови операции на високо ниво шутил модул в Python. Операции като копиране на съдържание на файл, създаване на ново копие на файл и т.н. изглеждаше лесно с този модул.