Eu preciso percorrer todos os .asm
arquivos dentro de um determinado diretório e executar algumas ações neles.
Como isso pode ser feito de maneira eficiente?
Resposta original:
import os
for filename in os.listdir(directory):
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
Versão Python 3.6 da resposta acima, usando os
- assumindo que você tenha o caminho do diretório como um str
objeto em uma variável chamada directory_in_str
:
import os
directory = os.fsencode(directory_in_str)
for file in os.listdir(directory):
filename = os.fsdecode(file)
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
Ou recursivamente, usando pathlib
:
from pathlib import Path
pathlist = Path(directory_in_str).glob('**/*.asm')
for path in pathlist:
# because path is object not string
path_in_str = str(path)
# print(path_in_str)
directory = os.fsencode(directory_in_str) for file in os.listdir(directory): filename = os.fsdecode(file) if filename.endswith(".asm") or filename.endswith(".py"): # print(os.path.join(directory, filename)) continue else: continue
print(os.path.join(directory, filename))
necessidade de ser alterado paraprint(os.path.join(directory_in_str, filename))
obtê-lo para trabalhar em python 3.6for entry in os.scandir(path): print(entry.path)
if filename.endswith((".asm", ".py")):
aif filename.endswith(".asm") or filename.endswith(".py"):
Isso irá percorrer todos os arquivos descendentes, não apenas os filhos imediatos do diretório:
fonte
Você pode tentar usar o módulo glob :
e desde o Python 3.5, você também pode pesquisar subdiretórios:
Dos documentos:
fonte
Desde o Python 3.5, as coisas são muito mais fáceis com os.scandir ( )
fonte
entry
é um posix.DirEntry tipo com um grupo de métodos úteis, tais comoentry.is_dir()
,is_file()
,is_symlink()
O Python 3.4 e posterior oferecem pathlib na biblioteca padrão. Você poderia fazer:
Ou se você não gosta de compreensões de lista:
Path
objetos podem ser facilmente convertidos em strings.fonte
Aqui está como eu repito os arquivos no Python:
NENHUM DESTES TÉCNICAS GARANTE QUALQUER PEDIDO DE ITERAÇÃO
Sim, super imprevisível. Observe que eu ordeno os nomes dos arquivos, o que é importante se a ordem dos arquivos for importante, ou seja, para quadros de vídeo ou coleta de dados dependente do tempo. Lembre-se de colocar índices nos seus nomes de arquivos!
fonte
from pkg_resources import parse_version
efilenames.sort(key=parse_version)
fez isso.Você pode usar glob para consultar o diretório e a lista:
Para obter a lista de todos os diretórios da matriz, você pode usar os :
fonte
Ainda não estou muito satisfeito com essa implementação, queria ter um construtor personalizado que faça
DirectoryIndex._make(next(os.walk(input_path)))
isso para que você possa simplesmente passar o caminho para o qual deseja uma listagem de arquivos. Edições bem-vindas!fonte
Eu realmente gosto de usar a
scandir
diretiva que está embutida naos
biblioteca. Aqui está um exemplo de trabalho:fonte