Python

модул shutil в Python

модул shutil в Python
Управлението на файлове и обработката на файловите обекти се считат за една от най-сложните задачи във всички програмни езици. Някои езици за програмиране ни предоставят някои инструменти, които абстрахират трудните части на обработката на файлове с лесни за използване функции и интерфейси. Това е точно това на Python шутил модул също прави.

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 (), чрез която можем да получим и информация за дисковото пространство за нашата машина. Нека да разгледаме пример, който показва тези данни по разбираем за човека начин:

внос shutil
total_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. Операции като копиране на съдържание на файл, създаване на ново копие на файл и т.н. изглеждаше лесно с този модул.

Най-добрите приложения за картографиране на геймпад за Linux
Ако искате да играете игри на Linux с геймпад вместо типична система за въвеждане на клавиатура и мишка, има някои полезни приложения за вас. Много ко...
Полезни инструменти за геймърите на Linux
Ако искате да играете игри на Linux, има вероятност да сте използвали приложения и помощни програми като Wine, Lutris и OBS Studio, за да подобрите иг...
HD Remastered Games за Linux, които никога преди не са имали издание на Linux
Много разработчици и издатели на игри излизат с HD ремастер на стари игри, за да удължат живота на франчайза, моля феновете, които искат съвместимост ...