Жолдор жана файл системасы менен иштөө
pathlib жана os аркылуу файл жолдорун көчмөлүү куруу, талдоо жана кыдыруу
Негизги идея: Баштапкы курста сиз файлды анын атын катуу жазып ачкансыз. Чыныгы программалар так жолду алдын ала сейрек билет: алар аны бөлүктөрдөн курат, бар-жогун текшерет, папканын ичиндегилерди тизмелейт жана бүтүндөй каталог дарактарын кыдырат. Мунун Python'догу заманбап куралы -
pathlib.Path: жолду морт сап катары эмес, түзүмдүү маалымат катары караган объект. Эски os модулу дагы бир нече боштукту толтурат, ошондуктан сиз экөөнү тең кездештиресиз.
Аягында сиз төмөнкүлөрдү жасай аласыз:
- жолдорду
"+"жана"/"аркылуу жабыштыруу ар кайсы операциялык системада эмне үчүн бузулаарын түшүндүрүү, - жолдорду
Pathжана/оператору менен коопсуз куруу, - жолду бөлүктөргө талдоо:
.name,.stem,.suffix,.parentжана.parts, - бар-жогун жана түрүн
.exists(),.is_file(),.is_dir()менен текшерүү, - папкаларды
.mkdir(parents=True, exist_ok=True)менен түзүү, - каталогдун ичиндегилерди
.iterdir(),.glob()жана.rglob()менен тизмелөө жана чыпкалоо, - бүтүндөй папка дарагын кыдыруу жана
osкачан керек экенин билүү.
1. Маселе: жол жөн гана сап эмес
Жол кадимки сапка окшойт, ошондуктан биринчи азгырык - бөлүктөрдү + менен жабыштыруу:
folder = "data"
name = "report.txt"
path = folder + "/" + name # "data/report.txt" - морт!
Бул ойлонуп эмес, кокустуктан иштейт. Ичинде эки чыныгы маселе жашырынган:
- Бөлгүчтөр айырмаланат. Linux жана macOS папкаларды түз сызык
/менен бөлөт; Windows тескери сызык\колдонот. Бирин катуу жазсаңыз, экинчи машинаны бузасыз. - Чектик учурлар топтолот.
folderмурунтан слэш менен бүтөбү? Бөлүк бош эмеспи? Сап арифметикасы ар бир учурду колмо-кол иштетүүгө мажбурлайт, бир өткөрүп жиберген учур жолду бузат.
pathlib муну жолду объект кылып чечет - ал өзүн иштеп жаткан ар кандай операциялык системада туура кошуп, бөлүп жана салыштыра билет.