Yuvalanm─▒┼č bir dizini nas─▒l g├╝venle olu┼čturabilirim?


Al─▒nan cevaba git


Python kullanarak bir dizinin var olup olmad─▒─č─▒n─▒ kontrol etmek i├žin bir dizinin var olup olmad─▒─č─▒n─▒ kontrol etmenin en zarif yolu nedir? ─░┼čte denedim:

 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)
 

Her nas─▒lsa, ├Âzledim os.path.exists (te┼čekk├╝rler kanja, Blair ve Douglas). ┼×imdi sahip oldu─čum ┼čey bu:

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

Bunu otomatik olarak yapan "a├ž─▒k" i├žin bir bayrak var m─▒?


3839









Cevap say─▒s─▒n─▒ say: 25






Her biri k├╝├ž├╝k bir kusur olan iyi niteliklere sahip iki cevap g├Âr├╝yorum, bu y├╝zden benim ├╝stlenece─čim.

Deneyin os.path.exists ve os.makedirs yarat─▒m─▒ d├╝┼č├╝n├╝n .

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

Yorumlar─▒n ve ba┼čka yerlerde belirtildi─či gibi, bir yar─▒┼č durumu var - dizin aras─▒nda olu┼čturulursa os.path.exists ve os.makedirs ├ža─čr─▒lar, os.makedirs bir ba┼čar─▒s─▒z olur OSError . Ne yaz─▒k ki, battaniyeyi yakalamak OSError ve devam etmek kusursuz de─čildir, ├ž├╝nk├╝ yetersiz izinler, tam disk vb. Gibi di─čer fakt├Ârler nedeniyle dizin olu┼čturma ba┼čar─▒s─▒zl─▒─č─▒n─▒ g├Âz ard─▒ eder.

Se├ženeklerden biri OSError , g├Âm├╝l├╝ hata kodunu yakalamak ve incelemek olacakt─▒r ( Python'un OSError'─▒ndan bilgi alman─▒n ├žapraz platformlu bir yolu var m─▒? ):

 import os, errno

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

Alternatif olarak, bir saniye olabilir os.path.exists , ancak di─čeri ilk kontrolden sonra dizini yaratt─▒─č─▒n─▒, sonra ikincisinden ├Ânce ├ž─▒kard─▒─č─▒n─▒ varsayal─▒m - hala kand─▒r─▒labildi─čimizi.

Uygulamaya ba─čl─▒ olarak, e┼čzamanl─▒ i┼člemlerin tehlikesi, dosya izinleri gibi di─čer fakt├Ârlerin neden oldu─ču tehlikeden az ya da ├žok olabilir. Geli┼čtiricinin, bir uygulamay─▒ se├žmeden ├Ânce, geli┼čtirilmekte olan uygulama ve beklenen ortam─▒ hakk─▒nda daha fazla bilgi sahibi olmas─▒ gerekir.

Python'un modern versiyonlar─▒ bu kodu biraz daha geli┼čtirerek her ikisini de a├ž─▒─ča ├ž─▒kararak FileExistsError (3.3 + 'da) ...

 try:
    os.makedirs("path/to/directory")
except FileExistsError:
    # directory already exists
    pass
 

... ve aranan bir anahtar s├Âzc├╝k arg├╝man─▒na os.makedirs exist_ok izin vererek (3,2+).

 os.makedirs("path/to/directory", exist_ok=True)  # succeeds even if directory exists.
 

4681







Python 3.5+:

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

pathlib.Path.mkdir Yukar─▒da kullan─▒ld─▒─č─▒ ┼čekliyle dizini yinelemeli olarak olu┼čturur ve dizin zaten varsa bir istisna olu┼čturmaz. Ebeveynlerin olu┼čturulmas─▒n─▒ istemiyorsan─▒z veya istemiyorsan─▒z, parents tart─▒┼čmay─▒ atlay─▒n .

Python 3.2+:

Kullanarak pathlib :

M├╝mk├╝nse, pathlib ad─▒ndaki ge├žerli backport'u y├╝kleyin pathlib2 . Ad─▒nda daha ├Ânce kullan─▒lmam─▒┼č eski destekleri y├╝klemeyin pathlib . Sonra, yukar─▒daki Python 3.5+ b├Âl├╝m├╝ne bak─▒n ve ayn─▒ ┼čekilde kullan─▒n.

Python 3.4 kullan─▒yorsan─▒z, gelse bile pathlib , kullan─▒┼čl─▒ exist_ok se├žene─či eksik . Backport, mkdir bu eksik se├žene─či i├žeren daha yeni ve daha ├╝st├╝n bir uygulama sunmay─▒ ama├žlamaktad─▒r .

Kullanarak os :

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

os.makedirs Yukar─▒da kullan─▒ld─▒─č─▒ ┼čekliyle dizini yinelemeli olarak olu┼čturur ve dizin zaten varsa bir istisna olu┼čturmaz. exist_ok Yaln─▒zca Python 3.2+ kullan─▒yorsan─▒z, varsay─▒lan de─čeri olan iste─če ba─čl─▒ arg├╝man vard─▒r False . Bu arg├╝man Python 2.x'te 2.7'ye kadar mevcut de─čil. Bu nedenle, Python 2.7 ile oldu─ču gibi manuel istisna i┼čleme gerek yoktur.

Python 2.7+:

Kullanarak pathlib :

M├╝mk├╝nse, pathlib ad─▒ndaki ge├žerli backport'u y├╝kleyin pathlib2 . Ad─▒nda daha ├Ânce kullan─▒lmam─▒┼č eski destekleri y├╝klemeyin pathlib . Sonra, yukar─▒daki Python 3.5+ b├Âl├╝m├╝ne bak─▒n ve ayn─▒ ┼čekilde kullan─▒n.

Kullanarak os :

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

Saf bir ├ž├Âzelti ilk ├Ânce os.path.isdir bunu kullanabilse de os.makedirs , yukar─▒daki ├ž├Âzelti iki i┼člemin s─▒ras─▒n─▒ tersine ├ževirir. Bunu yaparken, dizini olu┼čtururken yinelenen bir giri┼čimle yapmak zorunda oldu─ču ortak bir yar─▒┼č ko┼čulunu ├Ânler ve ayr─▒ca dosyalar─▒ dizinlerden ay─▒r─▒r.

─░stisna yakalama ve kullanma unutmay─▒n errno ├ž├╝nk├╝ s─▒n─▒rl─▒ yarar─▒n─▒ oldu─ču OSError: [Errno 17] File exists yani errno.EEXIST , dosya ve dizin her ikisi i├žin y├╝kseltilir. Dizinin olup olmad─▒─č─▒n─▒ kontrol etmek daha g├╝venilirdir.

Alternatif:

mkpath i├ž i├že dizini olu┼čturur ve dizin zaten mevcutsa hi├žbir ┼čey yapmaz. Bu, hem Python 2 hem de 3'te ├žal─▒┼č─▒r.

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

Ba┼č─▒na Bug 10948 , bu alternatifin ciddi s─▒n─▒rlama verilen bir yol i├žin piton s├╝recinin ba┼č─▒na sadece bir kez ├žal─▒┼čmas─▒d─▒r. Ba┼čka bir deyi┼čle, onu bir dizin olu┼čturmak i├žin kullan─▒rsan─▒z, o zaman Python'un i├žinden veya d─▒┼č─▒ndan silin, sonra mkpath ayn─▒ dizini yeniden olu┼čturmak i├žin tekrar mkpath kullan─▒n, sessizce daha ├Ânce dizini olu┼čturmu┼č olan ge├žersiz ├Ânbelle─če al─▒nm─▒┼č bilgisini kullanacak ve asl─▒nda yine dizini yap. Buna kar┼č─▒l─▒k, os.makedirs b├Âyle bir ├Ânbelle─če g├╝venmez. Bu s─▒n─▒rlama baz─▒ uygulamalar i├žin uygun olabilir.


Direkt├Âr├╝n modu ile ilgili olarak , l├╝tfen ├Ânemsiyorsan─▒z belgelere bak─▒n.


1157







Deneyin d─▒┼č─▒nda ve errno mod├╝l├╝nden gelen do─čru hata kodu yar─▒┼č ko┼čulundan kurtulur ve platformlar aras─▒d─▒r:

 import os
import errno

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

Ba┼čka bir deyi┼čle, dizinleri olu┼čturmaya ├žal─▒┼č─▒yoruz, ancak zaten varsalar hatay─▒ g├Ârmezden geliyoruz. ├ľte yandan, ba┼čka herhangi bir hata bildirilir. ├ľrne─čin, ├Ânceden 'a' dizini olu┼čturup t├╝m izinlerini kald─▒r─▒rsan─▒z, OSError y├╝kseltilmi┼č olarak al─▒rs─▒n─▒z errno.EACCES (─░zin reddedildi, hata 13).


600







┼×ahsen os.path.isdir() test etmek i├žin test etmenizi ├Âneririm 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
 

E─čer varsa:

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

Ve aptal bir kullan─▒c─▒ giri┼či:

 :: /tmp/dirname/filename.etc
 

... E─čer test yaparsan─▒z, filename.etc bu arg├╝man─▒ ge├žti─činizde isminde bir dizin bulunacakt─▒r . os.makedirs() os.path.exists()


100


2009-01-14





Kontrol Et os.makedirs : (Tam yolun var oldu─čundan emin olur.)
Dizinin var olabilece─či ger├že─čini ele almak i├žin, yakala OSError . (E─čer exist_ok bir False bir,) varsay─▒lan ( OSError hedef dizin zaten varsa y├╝kseltilir.)

 import os
try:
    os.makedirs('./path/to/somewhere')
except OSError:
    pass
 

76







Python 3.5'ten itibaren pathlib.Path.mkdir bir exist_ok bayrak vard─▒r:

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

Bu ├Âzyinelemeli dizini olu┼čturur ve dizin zaten varsa bir istisna olu┼čturmaz.

( Python 3.2'den ba┼člayarak os.makedirs bir exist_ok bayrak ald─▒─č─▒nda, ├Ârne─čin os.makedirs(path, exist_ok=True) )


65







Bu durumun ├Âzellikleriyle ilgili g├Âr├╝┼čler

Belirli bir yolda belirli bir dosya verir ve dizini dosya yolundan ├žekersiniz. Sonra dizininin oldu─čundan emin olduktan sonra okumak i├žin bir dosyay─▒ a├žmaya ├žal─▒┼č─▒rs─▒n. Bu kod hakk─▒nda yorum yapmak i├žin:

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

Yerle┼čik fonksiyonun ├╝zerine yazmaktan ka├ž─▒nmak istiyoruz dir . Ayr─▒ca, filepath veya belki de fullfilepath bundan daha iyi bir anlamsal add─▒r filename , bundan daha iyi yaz─▒lm─▒┼č olur:

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

Son hedefiniz bu dosyay─▒ a├žmak, ba┼člang─▒├žta yazman─▒z gerekti─čini belirtirsiniz, ancak esasen bu hedefe yakla┼č─▒yorsunuz (kodunuza g├Âre), okumak i├žin dosyay─▒ a├žar :

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

Okuma i├žin a├ž─▒l─▒┼č varsay─▒lmas─▒

Neden orada olmay─▒ ve okuyabilmeyi umdu─čun bir dosya i├žin bir dizin haz─▒rlad─▒n?

Sadece dosyay─▒ a├žmaya ├žal─▒┼č─▒n.

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

Dizin veya dosya orada de─čilse, IOError ili┼čkili bir hata numaras─▒na errno.ENOENT sahip olursunuz: platformunuzdan ba─č─▒ms─▒z olarak do─čru hata numaras─▒n─▒ g├Âsterir. ─░sterseniz yakalayabilirsiniz, ├Ârne─čin:

 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
 

Yazmaya ba┼člad─▒─č─▒m─▒z─▒ varsayarsak

Bu muhtemelen size isteyen konum.

Bu durumda, muhtemelen herhangi bir yar─▒┼č ko┼čuluyla kar┼č─▒ kar┼č─▒ya kalm─▒yoruz. ├ľyleyse sadece oldu─čunuzu yap─▒n, ancak yazmak i├žin w kip ile a├žman─▒z (ya a da eklemek i├žin) gerekti─čini unutmay─▒n. Ayr─▒ca dosya a├žmak i├žin ba─člam y├Âneticisini kullanmak i├žin Python en iyi y├Ântemdir.

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

Ancak, t├╝m verilerini ayn─▒ dizine koymaya ├žal─▒┼čan birka├ž Python i┼člemimiz oldu─čunu varsayal─▒m. O zaman dizinin olu┼čturulmas─▒ konusunda ├žeki┼čebiliriz. Bu durumda, makedirs aramay─▒ try-hari├ž bir blo─ča sarmak en iyisidir .

 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)
 

42







os.path.exists Fonksiyonu deneyin

 if not os.path.exists(dir):
    os.mkdir(dir)
 

33


2008-11-07





A┼ča─č─▒dakileri yazd─▒m. Yine de tamamen kusursuz de─čil.

 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
 

┼×imdi dedi─čim gibi, bu ger├žekten kusursuz de─čil, ├ž├╝nk├╝ dizini olu┼čturmada ba┼čar─▒s─▒z olma olas─▒l─▒─č─▒m─▒z ve bu s├╝re├žte onu yaratan ba┼čka bir i┼člemimiz var.


30







Bir dizinin var olup olmad─▒─č─▒n─▒ kontrol edin ve gerekirse olu┼čturun?

Bunun do─črudan cevab─▒, di─čer kullan─▒c─▒lar─▒n veya i┼člemlerin dizininizle kar─▒┼čt─▒r─▒lmas─▒n─▒ beklemeyece─činiz basit bir durum oldu─ču varsay─▒l─▒r:

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

veya dizini yapmak yar─▒┼č ko┼čullar─▒na tabi ise (yani, yolu kontrol ettikten sonra zaten ba┼čka bir ┼čey yapm─▒┼č olabilir), ┼čunlar─▒ yap─▒n:

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

Ancak, belki de daha iyi bir yakla┼č─▒m, a┼ča─č─▒dakileri kullanarak ge├žici dizinleri kullanarak kaynak ├žeki┼čmesi sorununu ortadan kald─▒rmakt─▒r tempfile :

 import tempfile

d = tempfile.mkdtemp()
 

─░┼čte ├ževrimi├ži dok├╝man─▒n esaslar─▒:

 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.
 

Python 3.5 yenilikler: pathlib.Path ile exist_ok

Biri Path yollarla kullanmak isteyece─či ├žok say─▒da y├Ântemle (3.4) yeni bir nesne var mkdir .

(Ba─člam i├žin, haftal─▒k bir rep'imi bir komut dosyas─▒yla izliyorum. ─░┼čte ayn─▒ veriler i├žin, Stack Overflow'a g├╝nde bir kereden fazla vurmaktan ka├ž─▒nmama izin veren kodun ilgili k─▒s─▒mlar─▒.)

─░lk ├Ânce ilgili ithalat:

 from pathlib import Path
import tempfile
 

os.path.join ┼×imdi u─čra┼čmak zorunda de─čiliz - sadece yol par├žalar─▒na bir / :

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

Ard─▒ndan dizinin var oldu─čundan kesinlikle eminim - exist_ok Python 3.5'te arg├╝man belirir :

 directory.mkdir(exist_ok=True)
 

─░┼čte belgelerin ilgili k─▒sm─▒ :

E─čer exist_ok do─čruysa, FileExistsError istisnalar (ayn─▒ davran─▒┼č─▒ g├Âz ard─▒ edilecektir POSIX mkdir -p komutu), ancak son yol bile┼čeni varolan dizin olmayan dosyas─▒ de─čil sadece.

─░┼čte beti─čin biraz daha fazlas─▒ - benim durumumda, bir yar─▒┼č ko┼čuluna tabi de─čilim, dizinin (veya i├žerdi─či dosyalar─▒n) orada olmas─▒n─▒ bekleyen tek bir i┼člem var ve kald─▒rmaya ├žal─▒┼čan hi├žbir ┼čeyim yok Rehber.

 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 nesnelerin, yollar─▒ kullanmas─▒n─▒ str bekleyen di─čer API'lerin ├Ân├╝ne ge├žmek i├žin zorlanmak zorundad─▒r str .

Belki de Pandalar soyut temel s─▒n─▒f─▒n ├Ârneklerini kabul edecek ┼čekilde g├╝ncellenmelidir os.PathLike .


24







Python 3.4'da yeni pathlib mod├╝l├╝ de kullanabilirsiniz :

 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.
 

21







─░lgili Python belgelerine kullan─▒m─▒n─▒ ├Ânermektedir (ma─čfiret daha izin isteyin daha kolay) tarz─▒ kodlama EAFP . Bu kod anlam─▒na gelir

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

alternatiften daha iyi

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

Belgeler, tam olarak bu soruda tart─▒┼č─▒lan yar─▒┼č durumu nedeniyle bunu ├Âneriyor. Ayr─▒ca, burada ba┼čkalar─▒n─▒n da belirtti─či gibi, i┼čletim sisteminin iki kez yerine bir kez sorgulamada performans avantaj─▒ vard─▒r. Son olarak, baz─▒ durumlarda ikinci kodun lehine ├Âne s├╝r├╝len arg├╝man - geli┼čtirici uygulaman─▒n ├žal─▒┼čt─▒─č─▒ ortam─▒ bildi─činde - yaln─▒zca program i├žin ├Âzel bir ortam olu┼čturdu─ču ├Âzel durumda savunulabilir. kendisi (ve ayn─▒ program─▒n di─čer ├Ârnekleri).

Bu durumda bile, bu k├Ât├╝ bir uygulamad─▒r ve uzun s├╝re i┼če yaramaz hata ay─▒klamaya neden olabilir. ├ľrne─čin, bir dizinin izinlerini belirledi─čimiz ger├že─či, bizi izin izinleriyle birlikte b─▒rakmamal─▒, izlenim izinleri ama├žlar─▒m─▒z i├žin uygun ┼čekilde ayarlanm─▒┼č olmal─▒d─▒r. Bir ├╝st dizin di─čer izinlerle birlikte monte edilebilir. Genel olarak, bir program her zaman do─čru ┼čekilde ├žal─▒┼čmal─▒ ve programc─▒ belirli bir ortam beklememelidir.


13







In Python3 , os.makedirs destekler ayar─▒ exist_ok . Varsay─▒lan ayar ┼čudur: Hedef dizin zaten mevcutsa, bunun kald─▒r─▒laca─č─▒ False anlam─▒na gelir OSError . Ayarlayarak exist_ok i├žin True , OSError (dizinin mevcut) g├Âz ard─▒ edilir ve dizin olu┼čturulmaz.

 os.makedirs(path,exist_ok=True)
 

In Python2 , os.makedirs ayar─▒ desteklemiyor exist_ok . Bu yakla┼č─▒m─▒ heikki-toivonen'in cevab─▒nda kullanabilirsiniz :

 import os
import errno

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

11







Kullanabilirsiniz mkpath

 # Create a directory and any missing ancestor directories. 
# If the directory already exists, do nothing.

from distutils.dir_util import mkpath
mkpath("test")    
 

Ata dizinleri de olu┼čturaca─č─▒n─▒ unutmay─▒n.

Python 2 ve 3 i├žin ├žal─▒┼č─▒yor.


9







Ben kullan─▒yorum os.path.exists() , i┼čte bir dizin olup olmad─▒─č─▒n─▒ kontrol etmek, yoksa bir tane olu┼čturmak ve e─čer varsa (onu silmek) silmek i├žin kullan─▒labilecek bir Python 3 beti─či.

Kullan─▒c─▒lardan dizinin giri┼čini ister ve kolayca de─či┼čtirilebilir.


8







Tek astarl─▒ bir ├ž├Âz├╝m i├žin ┼čunlar─▒ kullanabilirsiniz IPython.utils.path.ensure_dir_exists() :

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

G├Ânderen belgeler : Bir dizin var oldu─čundan emin olun. E─čer yoksa, ba┼čka bir i┼člem ayn─▒ yap─▒yorsa onu yaratmaya ve yar─▒┼č ko┼čullar─▒na kar┼č─▒ korumaya ├žal─▒┼č─▒n.


8







Bunun i├žin kullanabilirsiniz os.listdir :

 import os
if 'dirName' in os.listdir('parentFolderPath')
    print('Directory Exists')
 

6







Bu Q / A'y─▒ buldum ve ba┼člang─▒├žta ald─▒─č─▒m baz─▒ hatalar ve hatalar beni ┼ča┼čk─▒na ├ževirdi. Python 3'te ├žal─▒┼č─▒yorum (v.3.5 bir Arch Linux x86_64 sisteminde Anaconda sanal ortam─▒nda).

Bu dizin yap─▒s─▒n─▒ g├Âz ├Ân├╝nde bulundurun:

 ÔööÔöÇÔöÇ output/         ## dir
   ÔöťÔöÇÔöÇ corpus       ## file
   ÔöťÔöÇÔöÇ corpus2/     ## dir
   ÔööÔöÇÔöÇ subdir/      ## dir
 

─░┼čte deneyimlerim / notlar─▒m, her ┼čeyi netle┼čtiren ┼čeyler:

 # ----------------------------------------------------------------------------
# [1] https://stackoverflow.com/questions/273192/how-can-i-create-a-directory-if-it-does-not-exist

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
# ----------------------------------------------------------------------------
 

Sonu├ž: Bence "Y├Ântem 2" daha g├╝├žl├╝.

[1] Yoksa, bir dizini nas─▒l olu┼čturabilirim?

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


6







Heikki Toivonen ve ABB'nin cevaplar─▒n─▒ ve bu ├že┼čitlili─či d├╝┼č├╝nd├╝─č├╝n├╝ g├Ârd├╝m .

 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
 

6







A┼ča─č─▒dakileri g├Âz ├Ân├╝nde bulundurursan─▒z:

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

bir dizin (yol) var demektir VE bir dizindir. Yani benim i├žin bu ┼čekilde ihtiyac─▒m olan─▒ yapar. B├Âylece klas├Âr├╝n (bir dosya de─čil) ve var oldu─čundan emin olabilirim.


4







Destekleri komutu bir makinede ├žal─▒┼čan e─čer Neden alti┼člem mod├╝l├╝ kullanmak mkdir ile -p se├žene─čiyle? Python 2.7 ve Python 3.6 ile ilgili ├žal─▒┼čmalar

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

Hile ├žo─ču sistemde yap─▒lmal─▒.

Ta┼č─▒nabilirli─čin ├Ânemli olmad─▒─č─▒ durumlarda (├Ârne─čin, liman i┼č├žisi kullanarak) ├ž├Âz├╝m temiz 2 sat─▒rd─▒r. Ayr─▒ca, dizinlerin var olup olmad─▒─č─▒n─▒ kontrol etmek i├žin mant─▒k eklemeniz gerekmez. Son olarak, herhangi bir yan etkisi olmadan tekrar ├žal─▒┼čt─▒rmak g├╝venlidir

Hata i┼člemeye ihtiyac─▒n─▒z varsa:

 from subprocess import check_call
try:
    check_call(['mkdir', '-p', 'path1/path2/path3'])
except:
    handle...
 

4







create_dir() Program─▒n / projenin giri┼č noktas─▒ndaki i┼člevi ├ža─č─▒r─▒n .

 import os

def create_dir(directory):
    if not os.path.exists(directory):
        print('Creating Directory '+directory)
        os.makedirs(directory)

create_dir('Project directory')
 

3







Bu komut kontrol├╝n├╝ kullan─▒n ve dir olu┼čturun

  if not os.path.isdir(test_img_dir):
     os.mkdir(test_img_dir)
 

3







 import os
if os.path.isfile(filename):
    print "file exists"
else:
    "Your code here"
 

Buradaki kodunuzun (touch) komutunu kulland─▒─č─▒ yer

Bu, e─čer orada de─čilse, o dosyada olup olmad─▒─č─▒n─▒ kontrol edecektir.


1







Dizini olu┼čturmadan ├Ânce tam yolu ayarlaman─▒z gerekir:

 import os,sys,inspect
import pathlib

currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
your_folder = currentdir + "/" + "your_folder"

if not os.path.exists(your_folder):
   pathlib.Path(your_folder).mkdir(parents=True, exist_ok=True)
 

Bu benim i├žin ├žal─▒┼č─▒yor ve umar─▒m sizin i├žin de i┼če yarar.


1



─░lgili yay─▒nlar


Maven kullanarak ba─č─▒ml─▒l─▒klar─▒ olan ├žal─▒┼čt─▒r─▒labilir bir JAR'─▒ nas─▒l olu┼čturabilirim?

JavaScript'te iki boyutlu bir diziyi nas─▒l olu┼čturabilirim?

JQuery kullanarak ÔÇťPlease Wait, LoadingÔÇŽÔÇŁ animasyonunu nas─▒l olu┼čturabilirim?

Onalt─▒l─▒ dizeden bir UIColor nas─▒l olu┼čturabilirim?

Bir anahtar deposunu nas─▒l olu┼čturabilirim?

Bir dizini Visual Studio Kodu "Ara┼čt─▒r" sekmesinden nas─▒l hari├ž tutabilirim?

Popen i├žin ├žal─▒┼čma dizinini nas─▒l belirleyebilirim

Ortak Tablo ─░fadeleri i├žin yuvalanm─▒┼č WITH c├╝mleleri olu┼čturabilir misiniz?

Emacs i├žinden nas─▒l bir dizin olu┼čturabilirim?

Python'da i├ž i├že dict'i nas─▒l yarat─▒rs─▒n─▒z?

Etiketle ilgili di─čer sorular [python]


Bir klas├Âr├╝ scp kullanarak uzaktan kumandadan lokal olarak nas─▒l kopyalar─▒m? [kapal─▒]

Chrome'da ayn─▒ k├Âken politikas─▒n─▒ devre d─▒┼č─▒ b─▒rak

├çapraz iplik i┼člemi ge├žerli de─čil: Olu┼čturuldu─ču i┼č par├žac─▒─č─▒ d─▒┼č─▒ndaki bir i┼č par├žac─▒─č─▒ndan eri┼čilen denetim

LocalBroadcastManager nas─▒l kullan─▒l─▒r?

Map.get (Nesne anahtar─▒) (tamamen) genel olmamas─▒n─▒n nedenleri nelerdir

Java 8 Tesise g├Âre farkl─▒

Farkl─▒ yerel Git ┼čubeleri Heroku / master'a nas─▒l g├Ânderilir?

SQL Server 2005 / 2008'de haftan─▒n g├╝n├╝n├╝ al─▒n

ActiveRecord nesnesini nas─▒l silersiniz?

D├╝z JavaScript ile div y├╝kseklik al─▒n