Dubitinsider

for your information

Here `s the problem we` re trying to solve – if you ’ re doing this as homework, see the full info for this exercise:

0004-shakefiles/a.py

luo”tempdata” – Hakemisto idempotently

monien tehtävien kohdalla piilotat ladatut tiedostot ja tiedot paikalliseen hakemistoon, jonka nimi on tempdata. Kirjoita Python-ohjelma luodaksesi kyseisen hakemiston. Funktion pitäisi olla sen verran ”älykäs”, ettei se kaadu/error-out, jos tempdata hakemisto on jo olemassa.

odotukset

kun ajaa a.py komentoriviltä:

0004-shakefiles $ python a.py

  • ohjelman ei pitäisi tuottaa mitään näytölle.
  • ohjelma luo tämän tiedostopolun: tempdata (Hakemisto)
  • ohjelma ei saa kaatua, jos tempdata hakemisto on jo olemassa.

luodaan kansioita käyttöjärjestelmällä.makedirs ()

hakemiston luontitoiminto on erilainen eri käyttöjärjestelmissä, esimerkiksi Linux vs. Windows vs. Mac OS X. joten Pythonin standardikirjasto os tarjoaa makedirs() funktion.

Tämä edellyttää os-moduulin tuomista:

>>> import os>>> os.makedirs("mynewdirectory")

tehdään hakemisto, jossa ollaan

Joten mistä hakemisto luodaan? Missä skripti (tai ipython) on parhaillaan käynnissä.

Jos suoritat skriptisi vaikkapa ~/Desktop, niin seuraava komento:

>>> os.makedirs("exampledirectory")

– luo uuden hakemiston osoitteessa ~/Desktop/exampledirectory:

Desktop ## <== YOU ARE HERE├── exampledirectory 

käytä os.getcwd () selvittää missä olet

Jos haluat tietää missä olet, os moduulissa on getcwd() funktio (cwd tarkoittaa ”nykyistä työhakemistoa”:

>>> os.getcwd()/Users/dtown/Desktop 

hakemistojen tekeminen idempotentisti

Idempotenssi tarkoittaa operaation laatua, jossa operaatiota voidaan soveltaa useita kertoja ilman eri vaikutuksia joka kerta.

tässä esimerkki ei-idempotentista operaatiosta:

>>> os.makedirs("oopsie")>>> os.makedirs("oopsie")FileExistsError: File exists: 'oopsie'

makedirs() funktio heittää oletusarvoisesti virheen, jos yrität luoda hakemiston, joka on jo olemassa (tai jos yrität luoda kansion, jossa on sama polku kuin tiedostossa…mikä on ehdottomasti jotain, mitä haluat välttää)

ehdollisesti tarkistaa polun olemassaolon

yksi tapa kiertää tämä on tarkistaa olemassaoloa hakemiston/tiedoston ennen kuin yrittää luoda sitä, ehdollinen haara:

>>> if not os.path.exists('oopsie'):... os.makedirs('oopsie')

makediirien() funktion

vielä helpompi tapa on käyttää nimettyä argumenttia exists_okmakedirs() funktiota. Tämä argumentti on valinnainen, koska sillä on oletusarvo; oletuksena exists_ok on asetettu False – toisin sanoen se ei ole OK, jos yrität käyttää makedirs luodaksesi jo olemassa olevan polun.

kuitenkin asetus exists_ok to True soitettaessa makedirs() estää virheilmoituksen heittämisen:

>>> os.makedirs("oopsie", exist_ok = True)>>> os.makedirs("oopsie", exist_ok = True)# no error message is thrown...

näin luot helposti hakemistot ja alihakemistot Python-kielellä makedirs().

os-moduulin monilla funktioilla ja alimoduleilla

os moduulissa on paljon hyödyllisiä apuohjelmia, joiden avulla järjestämme lukemamme ja kirjoittamamme tiedostot. Myöhemmin käytämme käyttöjärjestelmää.path submodule

mutta tutustun tässä hetken aikaa os.path.join() funktioon ja sen ratkaisemaan ongelmaan.

tiedostopolun epäjohdonmukaisuus Windowsin ja OS X: n välillä

käsittelemme paljon tietokoneisiimme tallennettuja tiedostoja ja pakostakin käsittelemme niiden polkuja eli tekstimerkkijonoja, jotka kuvaavat seuraavaa alikansiota päästäkseen tiettyyn tiedostoon. Mutta tämä on monimutkaista, kun käsitellään eri käyttöjärjestelmiä.

OS X – ja kaikissa muissa Unix-pohjaisissa järjestelmissä, kuten Linuxissa, tiedostopolut esitetään tekstijonoina tässä muodossa siten, että eteenpäin viivat rajaavat alihakemistot ja varsinaisen tiedostonimen-tässä tapauksessa file.txt:

my/path/to/file.txt

Windowsissa käytetään takaviivaa:

\my\path\to\file.txt

Jos olet kiinnittänyt huomiota siihen, mitä backslash – merkki tarkoittaa Python – merkkijonoille, saatat muistaa, että se toimii pakojaksona-eli backslash muuttaa sitä seuraavan Tokenin (eli merkin) merkitystä. Tämä tarkoittaa kirjaimellisen kääntöviivan tulostamista Python-merkkijonolla, sinun on käytettävä kaksinkertaisia kääntöviivoja:

>>> print("\\my\\path\\to\\file.txt")\my\path\to\file.txt

, kuten voitte kuvitella, mikä voi vaikeuttaa Windowsissa ja kaikkialla muualla toimivan koodin kirjoittamista.

the os.polku.join () funktio

saamme käyttöoikeuden käyttöjärjestelmään.polkumoduuli, jos koodissamme on

import os

.

os.polku.join () – funktio vaatii määritetyn tiedostopolun luomiseen tarvittavan määrän argumentteja, ja jokainen argumentti edustaa polun yhtä komponenttia (eli alihakemistoa). Joten sen sijaan, että tekisit tämän:

mypath = "my/path/to/file.txt"

teemme näin:

mypath = os.path.join('my', 'path', 'to', 'file.txt')

ja ajoitpa koodia Windows-tai Unix-pohjaisissa järjestelmissä, tiedoston todellinen polku on johdonmukainen.

alihakemistojen tekeminen makediireillä ()

meidän ei tarvitse vielä tehdä sisäkkäisiä alikansioita – eli alikansioita alikansioiden sisällä, esim. somedir/subdir/subsubdir, mutta käytän sitä vain esimerkkinä reaalimaailman skenaariosta, jonka kohtaamme myöhemmin.

makedirs() funktio luo rekursiivisesti hakemistoja. Eli jos haluat luoda sisäkkäisen hakemiston:

>>> os.makedirs("my/fun/new/directory")

– se hoitaa tarvittavien ylähakemistojen luomisen:

ensin:

my

sitten:

my└── fun

sitten:

my└── fun └── new

– ennen määrittelemäsi varsinaisen hakemiston luomista, eli my/fun/new/directory:

my└── fun └── new └── directory

Tämä on melko kätevää. Ja kiva käyttökotelo os.path.join():

import osmypath = os.path.join("my", "fun", "new", "directory")makedirs(mypath)

saamme todellista käyttöä os.path.join next_lessonissa

Jos olet kiinnostunut siitä, miksi asiat ovat erilaisia käyttöjärjestelmien välillä…No, kuten kaikki elämässä, se tulee alas eri ihmiset ja yritykset luovat eri asioita eri aikoina eri yhteyksissä.

joten miksi Windows on pariton käyttöjärjestelmä out? Kaikki on kiinni muutamasta vuosikymmenten takaisesta historian onnettomuudesta.

Unix otti forward slash — merkin — eli / – merkin-käyttöön hakemistoerottimenaan vuoden 1970 tienoilla. Emme tiedä, miksi he valitsivat tämän, mutta tuon he valitsivat.

nykyään on vaikea kuvitella, mutta Microsoftin DOS — version alkuperäinen versio-eli MS — DOS 1.0-ei tukenut hakemistoja lainkaan, kun se julkaistiin vuonna 1981…MS-DOS 2.0 esitteli tuen hakemistoille, mutta IBM halusi säilyttää yhteensopivuuden alkuperäisen DOS-apuohjelman ja muiden ohjelmien kanssa, jotka odottivat / – merkkiä käytettävän kytkimissä. Microsoft oli jo käyttänyt / – merkkiä johonkin, joten he eivät voineet vain käyttää sitä uudelleen.

he valitsivat lopulta \ -hahmon sen sijaan, koska se oli visuaalisesti samannäköisin hahmo.

Vastaa

Sähköpostiosoitettasi ei julkaista.