Kaip galiu saugiai sukurti įdėtą katalogą „Python“?

Kas yra elegantiškiausias būdas patikrinti, ar yra katalogas, kuriame bus parašytas failas, ir jei ne, sukurkite katalogą naudodami „Python“? Štai ką bandžiau:

 import os file_path = "/my/directory/filename.txt" directory = os.path.dirname(file_path) try: os.stat(directory) except: os.mkdir(directory) f = file(filename) 

Aš kažkaip praleidau os.path.exists (ačiū, Kanya, Blair ir Douglas). Štai ką aš dabar turiu:

 def ensure_dir(file_path): directory = os.path.dirname(file_path) if not os.path.exists(directory): os.makedirs(directory) 

Ar yra vėliava „atvira“, kuri tai daro automatiškai?

3113
07 нояб. Parand yra nustatytas 07 lapkritis 2008-11-07 21:56 '08, 21:56, 2008-11-07 21:56
@ 28 atsakymai

Matau du atsakymus su geromis savybėmis, kurių kiekvienas turi šiek tiek trūkumų, todėl leisiu jam paimti jį į save:

Pabandykite os.path.exists ir apsvarstykite os.makedirs kūrimui.

 import os if not os.path.exists(directory): os.makedirs(directory) 

Kaip pažymėta pastabose ir kitur, yra lenktynių būklė - jei katalogas sukurtas tarp os.path.exists ir os.makedirs skambučių, os.makedirs baigiasi OSError . Deja, „ OSError ir „vykstantys“ nėra patikimi, nes nepaisys negalėjimo sukurti katalogo dėl kitų veiksnių, pvz., Nepakankamų leidimų, viso disko ir pan.

Vienas variantas yra „ OSError ir išnagrinėti įmontuotą klaidos kodą (žr. „ Ar„ Pythons OSError “yra informacijos apie platformą ):

 import os, errno try: os.makedirs(directory) except OSError as e: if e.errno != errno.EEXIST: raise 

Kita vertus, gali būti antras os.path.exists , bet manau, kad kitas sukūrė katalogą po pirmojo patikrinimo, o tada jį os.path.exists prieš antrą - mes vis tiek galėtume apgauti.

Priklausomai nuo taikymo, tuo pačiu metu veikiančių operacijų pavojus gali būti didesnis arba mažesnis už kitų veiksnių, pvz., Failų leidimų, keliamą pavojų. Prieš pasirinkdami įgyvendinimą, kūrėjas turės daugiau sužinoti apie konkrečią kuriamą programą ir numatomą aplinką.

3845
07 нояб. Atsakymas, kurį pateikė Blair Conrad 07.11. 2008-11-07 22:06 '08 at 22:06 pm 2008-11-07 22:06

Python 3. 5+:

 import pathlib pathlib.Path('/my/directory').mkdir(parents=True, exist_ok=True) 

pathlib.Path.mkdir kaip nurodyta aukščiau, rekursyviai sukuria katalogą ir nekelia išimties, jei katalogas jau yra. Jei jums nereikia arba norite sukurti parents , praleiskite parents argumentą.

Python 3. 2+:

Naudojant „ pathlib :

border=0

Jei galite, nustatykite dabartinį pathlib pavadinimą pathlib2 . Nenaudokite seno atsarginio failo pavadinimu pathlib . Tada žr. Skyrių „Python 3. 5+“ ir naudokite tą patį.

Jei naudojate „Python 3.4“, net jei jis yra su „ pathlib , nėra naudingos parinkties_ok. „Backport“ skirta naujesniam ir geresniam „ mkdir diegimui, kuriame yra šis trūkstamas pasirinkimas.

Naudojant os :

 import os os.makedirs(path, exist_ok=True) 

os.makedirs kaip nurodyta aukščiau, rekursiškai sukuria katalogą ir nekelia išimties, jei katalogas jau yra. Jis turi pasirinktinį argumentą, kuris exist_ok tik jei naudojamas Python 3. 2+ su numatytąją reikšmę False . Šis argumentas nėra „Python 2.x“ - 2.7. Taigi nereikia rankinio išimties tvarkymo, kaip ir Python 2.7.

Python 2. 7+:

Naudojant „ pathlib :

border=0

Jei galite, nustatykite dabartinį pathlib pavadinimą pathlib2 . Nenaudokite seno atsarginio failo pavadinimu pathlib . Tada žr. Skyrių „Python 3. 5+“ ir naudokite tą patį.

Naudojant os :

 import os try: os.makedirs(path) except OSError: if not os.path.isdir(path): raise 

Nors naivus sprendimas pirmiausia gali naudoti os.path.isdir o po to - os.makedirs , aukščiau pateiktas sprendimas pakeičia dviejų operacijų tvarką. Tuo pačiu metu jis neleidžia bendrajai lenktynių sąlygai, susijusiai su kartotiniu bandymu sukurti katalogą, ir taip pat pašalina dviprasmiškumą iš katalogų.

Atkreipkite dėmesį, kad išimties OSError: [Errno 17] File exists ir errno yra ribotas naudingumas, nes OSError: [Errno 17] File exists , t.y. errno.EEXIST , errno.EEXIST ir failams, ir katalogams. Patikimesnė paprasčiausiai patikrinti, ar katalogas yra.

Alternatyva:

mkpath sukuria įdėtą katalogą ir nieko nedaro, jei katalogas jau yra. Tai veikia tiek „Python 2“, tiek „3“.

 import distutils.dir_util distutils.dir_util.mkpath(path) 

Per Bug 10948 , rimtas šios alternatyvos apribojimas yra tas, kad jis veikia tik vieną kartą už python procesą tam tikrame kelyje. Kitaip tariant, jei naudojate jį sukurti katalogą, tada ištrinkite katalogą iš „Python“ viduje ar už jo ribų, tada vėl naudokite „ mkpath , jei norite atkurti tą patį katalogą, mkpath tiesiog tyliai naudoja informaciją apie tai, kas anksčiau buvo sukurta, ir tikrai nepadarys katalogo dar kartą. Priešingai, os.makedirs nesiremia tokia talpykla. Šis apribojimas gali būti tinkamas kai kurioms programoms.


Dėl katalogo režimo, jei norite, žr. Dokumentaciją.

879
16 янв. ABB atsakymą pateikė sausio 16 d. 2013-01-16 20:31 '13, 8:31 pm 2013-01-16 20:31

Naudodami bandymą, išskyrus teisingą klaidos kodą iš „errno“ modulio, atsikratoma lenktynių būklė ir ji yra kompleksinė:

 import os import errno def make_sure_path_exists(path): try: os.makedirs(path) except OSError as exception: if exception.errno != errno.EEXIST: raise 

Kitaip tariant, mes stengiamės sukurti katalogus, bet jei jie jau egzistuoja, mes ignoruojame klaidą. Kita vertus, pranešama apie kitas klaidas. Pvz., Jei iš anksto sukuriate dir 'a' ir pašalinsite visus leidimus iš jo, gausite „ OSError errno.EACCES (leidimo atsisakymas, klaida 13).

582
17 февр. atsakymą pateikė Heikki Toivonen , vasario 17 d. 2011-02-17 20:17 '11 at 20:17 2011-02-17 20:17

Aš asmeniškai rekomenduoju naudoti os.path.isdir() testavimui vietoj os.path.exists() .

 >>> os.path.exists('/tmp/dirname') True >>> os.path.exists('/tmp/dirname/filename.etc') True >>> os.path.isdir('/tmp/dirname/filename.etc') False >>> os.path.isdir('/tmp/fakedirname') False 

Jei turite:

 >>> dir = raw_input(":: ") 

Ir kvailas vartotojo įrašas:

 :: /tmp/dirname/filename.etc 

... Jūs baigsite katalogą, pavadintą filename.etc , kai perduosite šį argumentą os.makedirs() , jei patikrinsite su os.path.exists() .

90
14 янв. atsakymas pateikiamas raudonam akmeniui . 2009-01-14 20:57 '09 ne 20:57 2009-01-14 20:57

Patikrinkite os.makedirs : (Tai užtikrina, kad yra visas kelias).
Norėdami susidoroti su tuo, kad katalogas gali būti, supraskite OSError. (Jei esama_ok yra False (numatytasis), OSError atsiranda, jei tikslinis katalogas jau yra.)

 import os try: os.makedirs('./path/to/somewhere') except OSError: pass 
60
07 нояб. atsakymą pateikė Douglas Mayle, lapkričio 7 d. 2008-11-07 22:01 '08 at 10:01 pm 2008-11-07 22:01

Pagrindinė informacija apie šią situaciją

Konkrečiame faile nurodote konkretų kelią ir ištraukite katalogą iš failo kelio. Tada, įsitikinę, kad turite katalogą, bandote atidaryti failą skaitymui. Jei norite komentuoti šį kodą:

 filename = "/my/directory/filename.txt" dir = os.path.dirname(filename) 

Mes norime vengti perrašyti įmontuotą dir funkciją. Be to, filepath arba galbūt fullfilepath tikriausiai yra geresnis semantinis pavadinimas nei filename , todėl būtų geriau parašyti:

 import os filepath = '/my/directory/filename.txt' directory = os.path.dirname(filepath) 

Pagrindinis jūsų tikslas - atidaryti šį failą, kurį iš pradžių nurodėte, kad rašytumėte, bet iš esmės šį tikslą (pagal savo kodą), kaip jis yra, atidarote skaitymui :

 if not os.path.exists(directory): os.makedirs(directory) f = file(filename) 

Darant prielaidą, kad bus atidaryta skaityti

Kodėl sukuriate failą, kurį tikitės ten ir galėsite skaityti?

Tiesiog pabandykite atidaryti failą.

 with open(filepath) as my_file: do_stuff(my_file) 

Jei nėra katalogo ar failo, gausite IOError su atitinkamu klaidos numeriu: errno.ENOENT nurodys teisingą klaidos numerį, nepriklausomai nuo jūsų platformos. Jei norite, galite jį sugauti, pavyzdžiui:

 import errno try: with open(filepath) as my_file: do_stuff(my_file) except IOError as error: if error.errno == errno.ENOENT: print 'ignoring error because directory or file is not there' else: raise 

Darant prielaidą, kad atidarysime rašymą

Tai tikriausiai tai, ko norite.

Tokiu atveju, mes tikriausiai nekyla jokių lenktynių sąlygų. Taigi darykite tą patį, kaip ir jūs, bet atkreipkite dėmesį, kad įrašymui reikia atidaryti naudojant w režimą (arba pridėti). Taip pat „Python“ geriausia praktika naudoti konteksto tvarkyklę failams atidaryti.

 import os if not os.path.exists(directory): os.makedirs(directory) with open(filepath, 'w') as my_file: do_stuff(my_file) 

Tačiau, tarkime, turime keletą Python procesų, kurie bando visus savo duomenis įdėti į tą patį katalogą. Tada mes galime turėti klausimą apie katalogo kūrimą. Tokiu atveju geriausia, kad makedirs būtų įtraukti į makedirs , išskyrus bloką.

 import os import errno if not os.path.exists(directory): try: os.makedirs(directory) except OSError as error: if error.errno != errno.EEXIST: raise with open(filepath, 'w') as my_file: do_stuff(my_file) 
33
23 янв. Atsakymą pateikė Aaron Hall sausio 23 d. 2015-01-23 02:49 '15 at 2:49 2015-01-23 02:49

Pradedant nuo Python 3.5, pathlib.Path.mkdir turi egzistuojančią_okodę:

 from pathlib import Path path = Path('/my/directory/filename.txt') path.parent.mkdir(parents=True, exist_ok=True) # path.parent ~ os.path.dirname(path) 

Šis rekursyviai sukuria katalogą ir nekelia išimties, jei katalogas jau yra.

(lygiai taip pat, kaip os.makedirs gavo 3.2 exists_ok ).

32
14 дек. Hiro veikėjas atsakė 14 d. 2016-12-14 19:06 '16 at 19:06 2016-12-14 19:06

Išbandykite funkciją os.path.exists

 if not os.path.exists(dir): os.mkdir(dir) 
25
07 нояб. atsakymas duotas 07 lapkričio mėn. 2008-11-07 22:00 '08 22:00 val. 2008-11-07 22:00

Nustatiau šiuos veiksmus. Tačiau jis nėra visiškai įsitikinęs patikimumu.

 import os dirname = 'create/me' try: os.makedirs(dirname) except OSError: if os.path.exists(dirname): # We are nearly safe pass else: # There was an error on creation, so make sure we know about it raise 

Dabar, kaip sakiau, tai nėra tikrai patikima, nes mes turime galimybę nesukurti katalogo ir kito proceso, kuris jį sukurtų per šį laikotarpį.

24
08 нояб. atsakymą pateikė Ali Afshar 08 lapkritis 2008-11-08 00:23 '08 0:23 2008-11-08 00:23

Patikrinkite, ar yra katalogas ir, jei reikia, sukurkite jį?

Tiesioginis atsakymas į šį klausimą yra priimti paprastą situaciją, kai nenorite, kad kiti naudotojai ar procesai įvestų jūsų katalogą:

 if not os.path.exists(d): os.makedirs(d) 

arba , jei katalogo sukūrimas priklauso nuo lenktynių sąlygų (t.y., jei po kelio tikrinimo dar yra kažkas, ji galėjo tai padaryti):

 import errno try: os.makedirs(d) except OSError as exception: if exception.errno != errno.EEXIST: raise 

Bet galbūt net geriausias metodas yra apeiti išteklių ribojimo problemą naudojant temp katalogus per tempfile :

 import tempfile d = tempfile.mkdtemp() 

Čia yra pagrindinė informacija iš internetinio dokumento:

 mkdtemp(suffix='', prefix='tmp', dir=None) User-callable function to create and return a unique temporary directory. The return value is the pathname of the directory. The directory is readable, writable, and searchable only by the creating user. Caller is responsible for deleting the directory when done with it. 

Naujas Python 3.5: pathlib.Path with exist_ok

Yra naujas Path objektas (pradedant nuo 3.4) su daugybe metodų, kuriuos reikia naudoti su keliais - vienas iš jų yra mkdir .

(Dėl konteksto stebiu savo savaitės ataskaitą su scenarijumi. Čia pateikiamos atitinkamos scenarijų kodo dalys, leidžiančios vengti daugiau nei vieną kartą per dieną tų pačių duomenų.)

Pirma, atitinkamas importas:

 from pathlib import Path import tempfile 

Dabar nereikia nagrinėti „ os.path.join - tiesiog pridėkite kelio dalis naudodami / :

 directory = Path(tempfile.gettempdir()) / 'sodata' 

Tada aš tikiu, kad katalogas yra - argumentas „ exist_ok rodomas „Python 3.5“:

 directory.mkdir(exist_ok=True) 

Čia yra atitinkama dokumentacijos dalis :

Jei exist_ok išimtys bus ignoruojamos (toks pat elgesys kaip ir POSIX mkdir -p komandai POSIX mkdir -p ), bet tik tada, jei paskutinio kelio komponentas nėra esamas failas be katalogo.

Štai šiek tiek daugiau scenarijų - mano atveju, aš neatitinku lenktynių sąlygų, turiu tik vieną procesą, kuris tikisi, kad katalogas (ar failai) bus ten, ir aš nebandysiu ištrinti katalogo.

 todays_file = directory / str(datetime.datetime.utcnow().date()) if todays_file.exists(): logger.info("todays_file exists: " + str(todays_file)) df = pd.read_json(str(todays_file)) 

Path objektai turi būti priversti eiti prieš kitas API, kurios tikisi, kad jos bus naudojamos.

Pandas gali tekti atnaujinti, kad priimtų abstrakčios bazinės klasės, os.PathLike , os.PathLike .

17
23 янв. Atsakymą pateikė Aaron Hall sausio 23 d. 2015-01-23 02:45 '15, 02:45 am 2015-01-23 02:45

„Python 3.4“ taip pat galite naudoti naują „ pathlib modulį :

 from pathlib import Path path = Path("/my/directory/filename.txt") try: if not path.parent.exists(): path.parent.mkdir(parents=True) except OSError: # handle error; you can also catch specific errors like # FileExistsError and so on. 
15
11 марта '15 в 23:50 2015-03-11 23:50 atsakymą pateikė Antti Haapala kovo 11 d., 15 val. 23:50 2015-03-11 23:50

Atitinkami „Python“ dokumentai leidžia naudoti EAFP kodavimo stilių (lengviau prašyti atleidimo nei leidimai) . Tai reiškia, kad kodas

 try: os.makedirs(path) except OSError as exception: if exception.errno != errno.EEXIST: raise else: print "\nBE CAREFUL! Directory %s already exists." % path 

geriau nei alternatyva

 if not os.path.exists(path): os.makedirs(path) else: print "\nBE CAREFUL! Directory %s already exists." % path 

Dokumentuose daroma prielaida, kad tai yra būtent dėl ​​šioje srityje aptartos lenktynių sąlygos. Be to, kaip minėjo kiti, našumo pranašumas, kai užklausa atliekama vieną kartą, yra ne du kartus. Galiausiai pasiūlytas argumentas, galbūt naudingas antrajam kodui kai kuriais atvejais - kai kūrėjas žino aplinką, kurioje programa veikia - gali būti apsaugota tik tuo atveju, kai programa nustatė privačią aplinką (ir kitus tos pačios aplinkybės) ta pačia programa).

Nepaisant to, tai yra bloga praktika ir gali sukelti ilgą nenaudingą derinimą. Pvz., Tai, kad mes nustatėme leidimus katalogui, neturėtų palikti mums leidimų rodyti, kurie yra tinkamai nustatyti mūsų tikslams. Tėvų katalogą galima įdiegti su skirtingais leidimais. Apskritai, programa visada turėtų veikti teisingai, o programuotojas neturėtų tikėtis tam tikros aplinkos.

9
14 июля '14 в 18:29 2014-07-14 18:29 atsakymas pateikiamas kavadias 14 liepos 14 d. 18:29 2014-07-14 18:29

Galite naudoti mkpath

 # Create a directory and any missing ancestor directories. # If the directory already exists, do nothing. from distutils.dir_util import mkpath mkpath("test") 

Atkreipkite dėmesį, kad jis taip pat sukurs protėvių katalogus.

Jis veikia „Python 2“ ir „3“.

7
14 сент. Dennis Golomazovo atsakymas . 2016-09-14 00:44 '16 at 0:44 2016-09-14 00:44

Python3 programoje os.makedirs palaiko egzistuojančio_ok diegimą. Numatytoji reikšmė yra False , o tai reiškia, kad OSError bus iškeltas, jei tikslinis katalogas jau yra. Nustatydami egzistuojančią egzistuojančią_oką, „ OSError (katalogas yra) bus ignoruojamas ir katalogas nebus sukurtas.

 os.makedirs(path,exist_ok=True) 

Python2 sistemoje os.makedirs nepalaiko egzistuojančio_ok diegimo. Šį metodą galite naudoti atsakydami į Heikki-toivonen :

 import os import errno def make_sure_path_exists(path): try: os.makedirs(path) except OSError as exception: if exception.errno != errno.EEXIST: raise 
7
04 янв. atsakymą pateikė euccas Jan 04 2017-01-04 01:33 '17 at 1:33 2017-01-04 01:33

Aš naudoju os.path.exists() , čia yra „Python 3“ scenarijus, kurį galite naudoti norėdami patikrinti katalogą, sukurti jį, jei jis neegzistuoja, ir ištrinti, jei jis yra (jei yra).

Jis skatina vartotojus įvesti katalogą ir lengvai pakeisti.

6
09 февр. Atsakymą pateikė Michael Strobel 09 vasaris. 2017-02-09 06:56 '17 at 6:56 2017-02-09 06:56

Jei norite naudoti vieną eilutę, galite naudoti IPython.utils.path.ensure_dir_exists() :

 from IPython.utils.path import ensure_dir_exists ensure_dir_exists(dir) 

dokumentacijos : įsitikinkite, kad katalogas yra. Jei neegzistuoja, pabandykite ją sukurti ir apsaugoti nuo rasės būklės, jei kitas procesas vyksta taip pat.

6
29 марта '16 в 18:50 2016-03-29 18:50 atsakymas duotas tashuhka kovo 29 d. 16, 18:50 2016-03-29 18:50

Pamatiau atsakymus iš Heikki Toivonen ir ABB ir maniau apie šią galimybę.

 import os import errno def make_sure_path_exists(path): try: os.makedirs(path) except OSError as exception: if exception.errno != errno.EEXIST or not os.path.isdir(path): raise 
5
08 февр. atsakymas duotas alissonmuller 08 vasario 8 d. 2016-02-08 07:08 '16 at 7:08 2016-02-08 07:08

Radau šį Q / A, ir iš pradžių buvau nustebęs dėl kai kurių gedimų ir klaidų. Dirbu „Python 3“ (v.3.5 „Anaconda“ virtualioje aplinkoje „Arch Linux x86_64“ sistemoje).

Apsvarstykite šią katalogo struktūrą:

 └── output/ ## dir ├── corpus ## file ├── corpus2/ ## dir └── subdir/ ## dir 

Čia yra mano eksperimentai / pastabos, kuriose paaiškinami dalykai:

 # ---------------------------------------------------------------------------- # [1] /questions/340/how-to-check-if-a-directory-exists-and-create-it-if-necessary import pathlib """ Notes: 1. Include a trailing slash at the end of the directory path ("Method 1," below). 2. If a subdirectory in your intended path matches an existing file with same name, you will get the following error: "NotADirectoryError: [Errno 20] Not a directory:" ... """ # Uncomment and try each of these "out_dir" paths, singly: # ---------------------------------------------------------------------------- # METHOD 1: # Re-running does not overwrite existing directories and files; no errors. # out_dir = 'output/corpus3' ## no error but no dir created (missing tailing /) # out_dir = 'output/corpus3/' ## works # out_dir = 'output/corpus3/doc1' ## no error but no dir created (missing tailing /) # out_dir = 'output/corpus3/doc1/' ## works # out_dir = 'output/corpus3/doc1/doc.txt' ## no error but no file created (os.makedirs creates dir, not files! ;-) # out_dir = 'output/corpus2/tfidf/' ## fails with "Errno 20" (existing file named "corpus2") # out_dir = 'output/corpus3/tfidf/' ## works # out_dir = 'output/corpus3/a/b/c/d/' ## works # [2] https://docs.python.org/3/library/os.html#os.makedirs # Uncomment these to run "Method 1": #directory = os.path.dirname(out_dir) #os.makedirs(directory, mode=0o777, exist_ok=True) # ---------------------------------------------------------------------------- # METHOD 2: # Re-running does not overwrite existing directories and files; no errors. # out_dir = 'output/corpus3' ## works # out_dir = 'output/corpus3/' ## works # out_dir = 'output/corpus3/doc1' ## works # out_dir = 'output/corpus3/doc1/' ## works # out_dir = 'output/corpus3/doc1/doc.txt' ## no error but creates a .../doc.txt./ dir # out_dir = 'output/corpus2/tfidf/' ## fails with "Errno 20" (existing file named "corpus2") # out_dir = 'output/corpus3/tfidf/' ## works # out_dir = 'output/corpus3/a/b/c/d/' ## works # Uncomment these to run "Method 2": #import os, errno #try: # os.makedirs(out_dir) #except OSError as e: # if e.errno != errno.EEXIST: # raise # ---------------------------------------------------------------------------- 

Išvada: mano nuomone, „2 metodas“ yra patikimesnis.

[1] Kaip sukurti katalogą, jei jo nėra?

[2] https://docs.python.org/3/library/os.html#os.makedirs

5
16 дек. Atsakymą pateikė Victoria Stuart, gruodžio 16 d. 2017-12-16 07:16 '17, 07:16, 2017-12-16 07:16

Dirbant su failo I / OS, svarbu apsvarstyti

TOCTTOU (patikrinimo laikas naudojimo metu)

Tokiu būdu, patikrinus, ar vėliau ir vėliau skaitymas ar rašymas gali sukelti neapsakomą I / O išimtį. Geriausias būdas tai padaryti yra:

 try: os.makedirs(dir_path) except OSError as e: if e.errno != errno.EEXIS: raise 
4
19 окт. SHAHS spalio 19 d. Atsakymas 2017-10-19 17:09 '17, 17:09 val. 2017-10-19 17:09

Tam galite naudoti os.listdir :

 import os if 'dirName' in os.listdir('parentFolderPath') print('Directory Exists') 
4
08 июня '16 в 15:52 2016-06-08 15:52 atsakymas duotas „ iPhynx“ birželio 8 d. 16 d. 15:52 2016-06-08 15:52

Jei manote, kad:

 os.path.isdir('/tmp/dirname') 

reiškia, kad yra katalogas (kelias) IR yra katalogas. Todėl man šis kelias daro tai, ko man reikia. Taigi galiu įsitikinti, kad yra šis aplankas (o ne failas).

2
03 дек. Atsakymą pateikė Ralph Schwerdt 03 dec. 2016-12-03 19:00 „16 val. 19.00“ 2016-12-03 19:00

Naudokite šią komandą, kad patikrintumėte ir sukurtumėte katalogą.

  if not os.path.isdir(test_img_dir): os.mkdir(str("./"+test_img_dir)) 
1
16 апр. Atsakymą pateikė Manivannan Murugavel, balandžio 16 d. 2018-04-16 10:30 '18, 10:30, 2018-04-16 10:30

Kodėl gi ne naudoti subproceso modulį, jei jis veikia įrenginyje, kuris palaiko korpuso kalbas? Powered by python 2.7 ir python 3.6

 from subprocess import call call(['mkdir', '-p', 'path1/path2/path3']) 

Turi padaryti daugelio sistemų triuką.

1
11 сент. Geoffo Paulo Bremnerio atsakymas, pateiktas rugsėjo 11 d 2018-09-11 21:23 '18, 21:23 2018-09-11 21:23

Skambinkite „ create_dir() funkcija programos / projekto įėjimo taške.

 import os def create_dir(directory): if not os.path.exists(directory): print('Creating Directory '+directory) os.makedirs(directory) create_dir('Project directory') 
1
28 апр. Steffi Keran Rani atsakymas J 28 Bal. 2018-04-28 19:00 '18, 7 val. 2018-04-28 19:00

Kaip apie tai?

 import os import errno def make_sure_path_exists(path): try: os.makedirs(path) except OSError as exception: if exception.errno != errno.EEXIST: raise 
0
15 нояб. atsakymą pateikė Akash Nayak 15 nov. 2017-11-15 13:33 '17, 13:33 pm 2017-11-15 13:33
 import os os.system("mkdir -p ./testdir") 

-p atlieka visą darbą už jus, kodėl nerimaujate su šia bandymo / sugavimo programa, kai „Linux“ ir „Windows“ turi daugelį metų „mkdir -p“. Vienintelė priežastis, dėl kurios turite patikrinti, ar norite spausdinti informaciją žurnale ar ekrane.

0
29 авг. Rugpjūčio 29 d. Atsakymas, kurį pateikė Eamonn Kenny 2016-08-29 14:34 '16 at 14:34 pm 2016-08-29 14:34
 import os if os.path.isfile(filename): print "file exists" else: "Your code here" 

Kur jūsų komanda naudoja jūsų kodą (palieskite)

Tai patikrins, ar failas yra, jei ne, tada jis bus sukurtas.

-1
06 июля '17 в 2:15 2017-07-06 02:15 atsakymą pateikė „ Evil“ egzistuoja liepos 06 d. 17, 2:15 2017-07-06 02:15
 import os if not os.path.isfile("test") and not os.path.isdir("test"): os.mkdir("test") 
-2
02 сент. Atsakymas pateikiamas c4f4t0r 02 Sep. 2013-09-02 00:04 '13 - 0:04 2013-09-02 00:04