Respostas:
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 strobjeto 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 para print(os.path.join(directory_in_str, filename))obtê-lo para trabalhar em python 3.6
for 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:
import os
for subdir, dirs, files in os.walk(rootdir):
for file in files:
#print os.path.join(subdir, file)
filepath = subdir + os.sep + file
if filepath.endswith(".asm"):
print (filepath)
Você pode tentar usar o módulo glob :
import glob
for filepath in glob.iglob('my_dir/*.asm'):
print(filepath)
e desde o Python 3.5, você também pode pesquisar subdiretórios:
glob.glob('**/*.txt', recursive=True) # => ['2.txt', 'sub/3.txt']
Dos documentos:
O módulo glob encontra todos os nomes de caminho que correspondem a um padrão especificado de acordo com as regras usadas pelo shell Unix, embora os resultados sejam retornados em ordem arbitrária. Nenhuma expansão de til é feita, mas os intervalos de caracteres *,? E expressos com [] serão correspondidos corretamente.
Desde o Python 3.5, as coisas são muito mais fáceis com os.scandir ( )
with os.scandir(path) as it:
for entry in it:
if entry.name.endswith(".asm") and entry.is_file():
print(entry.name, entry.path)
O uso de scandir () em vez de listdir () pode aumentar significativamente o desempenho do código que também precisa de informações sobre o tipo ou o atributo do arquivo, porque os objetos os.DirEntry expõem essas informações se o sistema operacional fornecer essas informações ao varrer um diretório. Todos os métodos os.DirEntry podem executar uma chamada do sistema, mas is_dir () e is_file () 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ólicos no Windows.
entryé um posix.DirEntry tipo com um grupo de métodos úteis, tais como entry.is_dir(), is_file(),is_symlink()
O Python 3.4 e posterior oferecem pathlib na biblioteca padrão. Você poderia fazer:
from pathlib import Path
asm_pths = [pth for pth in Path.cwd().iterdir()
if pth.suffix == '.asm']
Ou se você não gosta de compreensões de lista:
asm_paths = []
for pth in Path.cwd().iterdir():
if pth.suffix == '.asm':
asm_pths.append(pth)
Path objetos podem ser facilmente convertidos em strings.
Aqui está como eu repito os arquivos no Python:
import os
path = 'the/name/of/your/path'
folder = os.fsencode(path)
filenames = []
for file in os.listdir(folder):
filename = os.fsdecode(file)
if filename.endswith( ('.jpeg', '.png', '.gif') ): # whatever file types you're using...
filenames.append(filename)
filenames.sort() # now you have the filenames and can do something with them
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!
from pkg_resources import parse_versione filenames.sort(key=parse_version)fez isso.
Você pode usar glob para consultar o diretório e a lista:
import glob
import os
#to get the current working directory name
cwd = os.getcwd()
#Load the images from images folder.
for f in glob.glob('images\*.jpg'):
dir_name = get_dir_name(f)
image_file_name = dir_name + '.jpg'
#To print the file name with path (path will be in string)
print (image_file_name)
Para obter a lista de todos os diretórios da matriz, você pode usar os :
os.listdir(directory)
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!
import collections
import os
DirectoryIndex = collections.namedtuple('DirectoryIndex', ['root', 'dirs', 'files'])
for file_name in DirectoryIndex(*next(os.walk('.'))).files:
file_path = os.path.join(path, file_name)
Eu realmente gosto de usar a scandirdiretiva que está embutida na osbiblioteca. Aqui está um exemplo de trabalho:
import os
i = 0
with os.scandir('/usr/local/bin') as root_dir:
for path in root_dir:
if path.is_file():
i += 1
print(f"Full path is: {path} and just the name is: {path.name}")
print(f"{i} files scanned successfully.")