Dubitinsider

for your information

Tady je problém se snažíme vyřešit – pokud to děláš jako domácí úkol, viz úplné informace pro toto cvičení:

0004-shakefiles/a.py

Vytvořit `tempdata` adresář idempotently

Pro mnoho úkolů, budete být stashing stažené soubory a data do lokálního adresáře s názvem tempdata. Napište program Python a vytvořte tento adresář. Tato funkce by měla být dostatečně „chytrá“, aby nedošlo k selhání / chybě, pokud adresář tempdata již existuje.

Očekávání

Při spuštění a.py z příkazového řádku:

0004-shakefiles $ python a.py

  • program by neměl výstup cokoliv na obrazovce.
  • program vytvoří tento soubor path: tempdata (adresáři)
  • program nesmí selhat, pokud tempdata adresář již existuje.

vytváření adresářů s os.makedirs()

akční vytvoření adresáře se liší napříč různými operačními systémy, například Linux vs. Windows vs. Mac OS X. Takže Python standardní knihovna os nabízí makedirs() funkce.

to vyžaduje import modulu os:

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

vytvoření adresáře, kde jste

takže kde se adresář vytvoří? Kdekoli je váš skript (nebo ipython) právě spuštěn.

Pokud spustíte skript z, řekněme ~/Desktop, pak následující příkaz:

>>> os.makedirs("exampledirectory")

– vytvoří nový adresář na ~/Desktop/exampledirectory:

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

Použití os.getcwd (), aby zjistili, kde jste

Pokud potřebujete vědět, kde jste, os modul getcwd() funkce (cwd stojí za to, „aktuální pracovní adresář“):

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

vytváření adresářů idempotently

Idempotence označuje kvalitu operace, při které lze operaci použít vícekrát bez různých efektů pokaždé.

zde je příklad neidempotentní operace:

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

makedirs() funkce vyvolá chybu ve výchozím nastavení, pokud se pokusíte vytvořit adresář, který již existuje (nebo, pokud se pokusíte vytvořit adresář se stejnou cestou jako soubor…což je rozhodně něco, co chcete vyhnout)

Podmíněně kontrola existence cestu

Jeden způsob, jak obejít toto je zkontrolovat existenci adresáře/souboru, než se snaží vytvořit to, jako podmíněné větev:

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

exists_ok pojmenovaný argument makedirs() funkce

ještě jednodušší způsob je použít pojmenovaný argument, exists_okmakedirs() funkce. Tento argument je nepovinný, protože to má výchozí hodnotu; ve výchozím nastavení exists_ok je nastavena na False – tj. to nebude OK, pokud se pokusíte použít makedirs vytvořit již existující cesty.

Nicméně, nastavení exists_okTrue při volání makedirs() zabrání se chybová zpráva od být vyvolána:

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

Takže to je to, jak můžete snadno vytvářet adresáře a podadresáře v Pythonu s makedirs().

mnoho funkcí a dílčích modulů os modulu

os module má mnoho užitečných nástrojů, které budeme používat, aby organizovat soubory, které jsme číst a psát. V pozdější lekci budeme používat operační systém.path submodule

ale budu trvat nějaký čas, abych vás seznámil s funkcí os.path.join() a problémem, který řeší.

cesta k Souboru nesoulad mezi Windows a OS X

Budeme mít co dočinění s hodně soubory uložené na našich počítačích, a nutností, budeme se zabývat jejich cesty, tj. textové řetězce, které popisují další podadresáře, aby skutečně dostat na konkrétní soubor. To je však komplikované při práci s různými operačními systémy.

Na OS X a jiné Unix-založené systémy, jako jsou Linux, cesty souborů jsou reprezentovány jako textové řetězce v tomto formátu, s dopředu lomítka vymezení podadresářů a skutečným názvem – v tomto případě, file.txt:

my/path/to/file.txt

V systému Windows, zpětné lomítko se používá:

\my\path\to\file.txt

Pokud jste nevěnoval pozornost na to, co znak zpětného lomítka znamená pro řetězce v Pythonu, možná si vzpomenete, že to funguje jako escape sekvence – tj. zpětné lomítko mění význam tokenu (tj. znak), která následuje. To znamená, že k tisku doslovný zpětné lomítko v Python řetězce, budete muset použít dvojitá zpětná lomítka:

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

Jak si dokážete představit, že by mohlo zkomplikovat schopnost psát kód, který funguje na Windows a všude jinde.

os.cesta.join () funkce

získáme přístup k os.modul cesty, pokud máme v našem kódu import os.

os.cesta.funkce join () má tolik argumentů potřebných ke generování zadané cesty k souboru, přičemž každý argument představuje jednu složku (tj. Takže místo toho, aby to udělal:

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

:

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

A to, zda používáte kód na Windows nebo Unix-založené systémy, skutečná cesta k souboru, budou v souladu.

Vytvořit podadresáře s makedirs()

nemusíme dělat vnořené podadresáře přesto – tj. podadresáře v podadresářích, např. somedir/subdir/subsubdir, ale použil jsem to jako příklad v reálném světě scénář, který budeme později narazíte.

funkce makedirs() rekurzivně vytváří adresáře. To znamená, že pokud chcete vytvořit vnořené adresáře:

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

– to se postará o vytvoření potřebných nadřazené adresáře:

:

my

:

my└── fun

, Pak:

my└── fun └── new

– před vytvořením aktuální adresář, který jste zadali, tj. my/fun/new/directory:

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

To je docela pohodlné. A pěkný případ použití pro os.path.join():

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

Budeme mít nějaké skutečné používání os.path.join v next_lesson

Pokud vás zajímá, proč se věci se liší mezi operačními systémy…no, jako všechno v životě, to přijde dolů pro různé lidi a firmy, vytváření různých věcí v různých časech v různých kontextech.

tak proč je Windows zvláštní operační systém ven? Je to všechno až na několik nehod historie, které se staly před desítkami let.

Unix zavedl znak lomítka-to je znak / – jako oddělovač adresářů kolem roku 1970. Opravdu nevíme, proč si vybrali tenhle, ale to je ten, který si vybrali.

je těžké si představit dnes, ale původní verze Microsoft DOS — MS-DOS 1.0 — nevěděl, podpora adresářů, když to bylo propuštěno v roce 1981…MS-DOS 2.0 zavedena podpora pro adresáře, ale IBM chtěla udržet kompatibilitu s původní DOS utilit a dalších programů, které očekával / znak, které mají být použity pro přepínače. Microsoft již použil znak / pro něco, takže jej nemohli znovu použít.

nakonec zvolili místo toho znak \ , protože to byl vizuálně nejpodobnější znak.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.