Yanıtlar:
Orijinal cevap:
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
Yukarıdaki yanıtın Python 3.6 sürümü, os
- olarak str
adlandırılan bir değişkende nesne yoluna sahip olduğunuzu varsayarsak 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
Veya özyineli olarak 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))
print(os.path.join(directory_in_str, filename))
3.6 python çalışmak için değiştirilmesi gerekiyor
for entry in os.scandir(path): print(entry.path)
if filename.endswith((".asm", ".py")):
etmekif filename.endswith(".asm") or filename.endswith(".py"):
Bu, sadece dizinin hemen alt öğelerini değil, tüm alt dosyaları tekrarlayacaktır:
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)
Glob modülünü kullanmayı deneyebilirsiniz :
import glob
for filepath in glob.iglob('my_dir/*.asm'):
print(filepath)
Python 3.5'ten bu yana alt dizinleri de arayabilirsiniz:
glob.glob('**/*.txt', recursive=True) # => ['2.txt', 'sub/3.txt']
Dokümanlardan:
Glob modülü, sonuçlar rasgele sırayla döndürülmesine rağmen, Unix kabuğu tarafından kullanılan kurallara göre belirtilen bir kalıpla eşleşen tüm yol adlarını bulur. Yaklaşık işareti genişletmesi yapılmaz, ancak [] ile ifade edilen *,? Ve karakter aralıkları doğru şekilde eşleştirilir.
Python 3.5'ten beri , os.scandir ( ) ile işler çok daha kolay
with os.scandir(path) as it:
for entry in it:
if entry.name.endswith(".asm") and entry.is_file():
print(entry.name, entry.path)
List.Del () yerine scandir () kullanılması, dosya türü veya dosya özniteliği bilgileri de gerektiren kodun performansını önemli ölçüde artırabilir, çünkü işletim sistemi bir dizini tararken os.DirEntry nesneleri bu bilgileri sağlar. Tüm os.DirEntry yöntemleri bir sistem çağrısı gerçekleştirebilir, ancak is_dir () ve is_file () genellikle sembolik bağlantılar için yalnızca bir sistem çağrısı gerektirir; os.DirEntry.stat () her zaman Unix üzerinde sistem çağrısı gerektirir, ancak Windows'taki sembolik bağlantılar için yalnızca bir çağrı gerektirir.
entry
a, posix.DirEntry gibi kullanışlı yöntemler bir grup ile türü entry.is_dir()
, is_file()
,is_symlink()
Python 3.4 ve üzeri standart kütüphanede pathlib sunar . Şunları yapabilirsiniz:
from pathlib import Path
asm_pths = [pth for pth in Path.cwd().iterdir()
if pth.suffix == '.asm']
Veya liste kavrayışlarından hoşlanmıyorsanız:
asm_paths = []
for pth in Path.cwd().iterdir():
if pth.suffix == '.asm':
asm_pths.append(pth)
Path
nesneler kolayca dizgilere dönüştürülebilir.
İşte Python dosyaları üzerinden yineleme:
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
BU TEKNİKLERİMİZDEN HİÇBİR SANTRASYON SİPARİŞİ GARANTİSİ
Evet, süper tahmin edilemez. Dosya adlarının sıralandığına dikkat edin, bu da dosyaların sırası önemliyse, video kareleri veya zamana bağlı veri toplama için önemlidir. Dosya adlarınıza dizinler eklediğinizden emin olun!
from pkg_resources import parse_version
ve filenames.sort(key=parse_version)
başardı.
Glob'u dizine ve listeye başvurmak için kullanabilirsiniz :
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)
Dizideki tüm dizinlerin listesini almak için os kullanabilirsiniz :
os.listdir(directory)
Bu uygulama ile henüz çok mutlu değilim DirectoryIndex._make(next(os.walk(input_path)))
, sadece bir dosya listesi istediğiniz yolu geçebileceği şekilde yapan özel bir oluşturucuya sahip olmak istedim . Düzenlemeler hoş geldiniz!
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)
Kütüphanede scandir
yerleşik olan direktifin kullanılmasını gerçekten seviyorum os
. İşte çalışan bir örnek:
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.")