Você está na página 1de 9
Perguntas semelhantes: Listagem de arvore de diretorio em Python edeandreinoen Pho O91 572. Como obtenho uma lita de todos os arquivos (e iretrios) em um determinado diretrio no ‘Como clonar um o @ subdiretério apenas de 5 Pague sem complicagao nuncio Que tal receber sua comid: Obtendo uma lista de, favorita na porta de casa? E s6 ape todos os subsiratdrios no diretério atual Co $60 PayPal Criar Conta Importar um arquivo de um subdiretério? © 456 Respostas: Como criar subdiretérios inexistentes recursivamente usando o 615 _ Esta éuma maneira de percorrer todos 0s arquivos e diretérios em uma drvore de diretrios: 7a0 import os oy o aj _|'or strane, trans, items in os att B # print path to all subdirectories first. for subdirnane in dirnanes: prine(os.path.join(dimnane, subdirnane)) ‘print path to all filenases for Filename in filenares: print(os.path. join(airnane, filenane)) # advanced usage # editing the ‘dirnanes' List will stop os.walk() from recursing into there. Af “agit” in dirnanes # con't go into any .git directories. trnanes.renove(’ git") 19 Ese vocé executar esse codigo (como est4) no Python Shell lembre-se de que Ctrl + C ‘mj _interromperd a saida para o referido shell.) 41. sso lstard recursivamente arquivos e diretérios Vocé pode até editar a lista de nomes de diretério para impedir que ela se repita em alguns caminhos, — tual 8 @ Clément "Quando o topdown é True, o chamador pode modificar a sta de nomes de diretérios no local (talvez usando a atribuigdo del ou slice), e walk 0 recursaré apenas nos subdiret6rios cujos nomes permanecem em nomes de diretérios; isso pode ser usado para remover a pesquisar, impor uma ordem especifica de visita ou até mesmo informar walk 0) sobre © diretérios que o chamador cria ou renomeia antes de retomar walk () novamente. " do docs.python.org/2/library/os htmlos.walk oat ‘yA maneira mais simples de ignorar alguns diretérios & ndo adicioné-los & dirnames em primeiro lugar for subdirnane in dirnanes: if subdirnane I> “agit” =sua 537 Voce pode usar © [reaistaincoatmy Fy Para rferancia eras tances, ve aul * Documentos do Python 2: https://docs, python org/2/library/os html listir * Documentos do Python 3: https//docs.python.org/3/library/os htmloslistir 1 bem, a pergunta original é vaga o suficiente para no saber se eles queriam uma solugo 2g recursiva, “todos os arquivos em um diretério" podem ser interpretadlos como recursivos. 3 @ Tommy, um “diretério” é uma estrutura de dados claramente definida e refere-se a "Is" em mm vez de ls -R’. Além disso, quase todas as ferramentas UNIX no funcionam recutsivamente por padrio, Nao sei o que o interlocutor quis dizer, mas o que ele escreveu foi claro, inten Songer m__ No os.scandir entanto, os documentos do python 3 dizem para vocé usar, pois, em muitos ‘eases, permite impedir chamadas do sistema, acelerando gratuitamente (0 IPC ¢ 0 10 s80 lentos) sciasaberéoceguinie 5. _listdir fornece o tinico nome do arquivo no diretério. Existe um método disponivel para obter 0 ‘aj caminho completo? 1 @grepertor Voeé pode usar os,path.abspath para obter 0 caminho completo, Além disso, para 2g veTiicar se um determinado caminho é um arquivo, use 0 arquivo os pathisfile ou fos.path.isdir = 78408 Abana 411 Aquiesté uma fungao auxiliar que eu uso com frequéncia import os fig (et ustete pate: aM return [os.path.Join(4, #) for f in os.1istdir(d)] Bowe 3. Um gerador seria melhor. a Ribena 1 @RobertSiemer que depend do uso. Em muitos casos, uma lista seria melhor, mas acho que ym gerador é mais versiti, pois pode ser convertido em uma lista, Depende se vocé esti procurando, versatilidade ou algo um pouco mais simplificado. lames Mehugh 08/19 3. Faz dez anos, mas acho que fiz dessa maneira porque os lstdir 0 retorna uma lista e eu estava y_imitando isso, ceca sab import 05 print fllenare Bowe :\tenp’ é mais claro e preferivel a "c: ay invertidas suck \\tenp” Rawstrings é preferivel a evitar barras Se vocé precisar de habilidades de globbing, hé um médulo para isso também. Por exemplo: import glob ‘lob. glob("./[8-3].*") retormara algo como: [ei 22.0") Veja a documentagio aoui Bowe Tente o seguinte import 05 for top, dirs, files in os.walk(’./*): for nm io fill print 05.path.Join(top, a) tome Em uma linha: [topo os sep + + f para parte superior, dirs ficheitos em os.walk ( ./) para fem arquivos] uierson Para arquivos no diretério de trabalho atual sem especificar um caminho Python 2.7: import 05 05.Listair(os.getcwd()) Python 3.x: Amport os 0s. Listain() Obrigado a Stam Kaly por comentar sobre o python 3.x Daye Enginest Stone 5 9s.1istéin() lista elementos no diretério atual por padrdo! Portanto, ndo ha necessidade de my ossgetend() Sar aly ‘Como eu fara isso? Quando eu uso >>> os listdir ) sem um argumento que eu recebo: Typefrrar:istDir ()recebe exatamente 1 argumento (0 dado} 48 Caste 2 Presume que vocé esteja executando 0 2,7, Iso fol adicionado na versio 3x —Sab 5 _Uma implementagao recursiva © finwore os 6H) faperoners for name in 0s. listdir(dir): path = os.path.Join(dir, nane) Af os.path.istile(path): print path else: sean_dir(path) Eu escrevi uma versio longa, com todas as opcBes que preciso: ht//sam njplnet/code/pyshon/fnd.py, 3 © Ewacho que vai caber aqui também 3 l/usr/ein/eny python import os import sys def Is(din, hicdensFalse, relativestrue) nodes = (] for nm in os.1istdir(eir): Af not hidden and nm.startswitn(’.) ‘continue Af not relative fan = 05.path-Join(dir, nm) nodes. append(na) nodes.sort() return nodes def Find(rost, Files-True, dins-False, hidden-False, relative-True, topdoun=True) oct = 0s.path.join(root, '') # add slash if not there for parent, Idirs, Lflles in os.walk(ract, ‘opdoun=topdown) : if relative parent = parent(en(root):] Af dirs and parent: yield os.path. join(parent, **) Af not hidden: files [nm for nm in 1files £f not ne.startswich( Adirs[:] = [nm for nm in loins iF not ne. startswith( Af Files; files.sort() m1 *)) tan place — sen wwe tn ‘Aqui esta outra opcio. ‘05. scandir (path=".") Ele retorna um iterador dos objetos os DirEntry correspondentes as entradas (junto com as informacées do atributo do arquivo) no diretério fornecide pelo caminho, Exemple: ith os.scandin(path) as it for entry in it: Af not entry.nane.startswith(* prins(entry.nare) (© uso de scandir () em vez de listdir () pode aumentar significativamente 0 desempenho de ‘cédigo que também precisa de informagdes sobre o tipo ou 0 atributo do arquive , porque os ‘bjetos os.DirEntry expdem essas informacdes se o sistema operacional fornecer essas informacées a0 vatrer um diretério. Todos os métodos os. DirEntry podem executar uma chamada do sistema, mas is.dir (.e is-fle 0 geralmente requerem apenas uma chamada do sistema para links simbélicos; ‘os DirEntry-stat (sempre requer uma chamada do sistema no Unix, mas apenas uma para links simbélicas no Windows. Documentos do Python — Haim Bowe Embora es.1istdir() seja bom para gerar uma lista de nomes de arquivos e diretorios, frequentemente voc deseja fazer mais quando tiver esses nomes - e no Python3, o pathlib simpliiea essas tarefas, \Vamos dar uma olhada e ver se vocé gosta tanto quanto eu. Para lstar 0 cantetido do diretério, construa um objeto Path e pegue o iterador In [16]: Path("/ete").dterdin() out{26]: «generator object Path.iterain at oxa2¢ s3fca> ‘Se queremos apenas uma lsta de nomes de coisas: in [17]: Desname for x in Path(*/ete').iterair()] out (27 [enond ‘ntp-restrict.conf*, periodic’, Se vocé quiser apenas os diretérios: In [18]: [K.name for x in Path("/ete').iterdir() if xis dir()) out a8 [enond.<", “pertodte' “nach_init.d", Se voc8 deseja os nomes de todos os arquivos conf nessa arvore En [20]: [k.name for x in Path(*/etc').glob("**/*.con#*)] out(20 [intp-restesct conf", dnsexté.cont", syslog.conf", Se vocé deseja uma lista de arquivos conf na érvore> = 1K: + [amame for x in Path("/etc').glob("**/*.conf") if x.stat().st_size > 1024] ['dasextd.conf", “pf cont, “autots. cont", Resolver caminhos relativos fica facil: In [32]: Path("../Operational Metrics.nd’ ).resolve() ut[32]: Posixpath(/Users/starver/code/xax/Operational Metrics.ad") Navegar com um caminho é bastante clara (embora inesperado}: In [10]: p = Path ) in [11] core =p / ‘web! / ‘core’ In [13]: [x for x in cone.iterdin() if x.is_file()] out(33]: [PosixPath(web/core/metrics.py')» PosixPath( ‘web/core/services.py'), PosixPath( ‘web/core/querysets.py'), Stee ane Boos Um bom liner para listar apenas os arquivos recursivamente. Eu usei isso na minha diretiva setup.py package_data: Amport os [os.path.Join(x{@],y) for x in os.walk("") for y in x[2)] Sei que no é a resposta para a pergunta, mas pode ser itil IB |e Para Python 2 #1 /oin/python2 Amport os ‘def scan_din(path): print map(os.path.abspath, 0s.1isteir(pwd)) Para Python 3 Para filtro @ mapa, voc8 precisa envolvé-los com lst () #1/otn/python3 import os def scan_din(path print (List (eap(os.path.abspath, os.1istdin(pxd)))) A recomendacio agora é substituiro uso de mapa e filtro por expressdes de geradores ou compreensio de lista #1/bin/python Amport os ‘def scan_din(patn): print ([os.path.abspath(f) for £ in os.Listdin(pstn) |) —Aleanro alco ‘Aqui esta uma versio Pythonic de uma linha: Anport os dir = “given_directory_nane* Filenares = [0s.path.Join(os.path.dirnare(os.path-abspath(__file_)),dir,t) for 1 in 0s. Listair(dir)] Este cédiga lista 0 caminho completo de todos os arquivos e diretérios no nome do diretério fornecido. seeing tows ‘aj Obrigado Saleh, mas o seu cédigo ndo funcionou completamente e o cédligo funcionado foi ‘modificado da seguinte forma: ‘dir =" nome_do_diretério_nome ‘nome dos arquivos [os path.abspath (os,path join (dit, ) para i em oslistdir (din) Hasansh 297619 Eu sei que esta é uma pergunta antiga. Esta é uma maneira elegante de me deparar se vocé estiver em ‘uma méquina liunx, import subprocess print subprocess. check_output(("l 1 °/T) decode “ut f8")) 0 o ma Hisport modules Amport os CURRENT pIR = °° def rec_tree_traverse(curr_dir, indent): “recuresve function to traverse the directory” print “[traverse_tree] try: GfList = [os-path.Join(curr_dir, ford) for ford in os.listdir(curr_dir)] except: print "wrong path nase/directory nane” return for file_or_din in oflist: Af os.path.isdin( ile or dir): print “dir: ", print indent, file_or_dir,"\\" rec_tree_traverse(File_or dir, indent*2) if 05.path.1s#ile(File_or die) Sprint “File: *, print indent, file or dir fend Sf for Loop. — Aloe Boos 5. Esta questio jé tem uma resposta perfeitamente boa, nio hi necessidade de responder fy novamente # bie Fenninaios FYI Adicione um filtro de extensSo ou importagao de arquivo ext path =." for dirnane, dirnanes, filenames in os.valk(path) # print path to all filenares with extension py. for filename in filensees: fnane_path = os.path.join(éinnare, filename) Fext = os.path.splitext(Fnaee_path) [1] 4 fext == "py print fnane_path else: continue —mowlon2e0 Bone Se fosse o caso, eu jogaria isso para dentro. Maneira simples e suja de fazer pesquisas de caracteres curinga, Amport re Amport os [2 for a in os.listdir(".") if revsearch("*.*\.py$",a)] —bnewr7o 0 cédigo abaixo lista os diretérios e os arquivos no diretério 2 CQ) (der print_atrectory_contents(sPath): import 05 for schild in os.Listair(spath): 3 Schildeath = o5.path.join(sPath, schil¢) Af 0s.path. 1sdir(schiléPath) print_directory_contents(schildPath) else: print(schi1épath) (© que trabalhou comigo é uma espécie de versio modificada da resposta de Saleh © cédigo € 0 seguinte: (‘Boe “dir = nomes de arquivos 'nome_do_diretério' para ino oslistdir (din}* tion required, ce que eu e compreendeu nossa alta de Licensed un Cookies nossa Polica de Privacidade 2 by-s8 30 with

Você também pode gostar