Jak mogę iterować nad plikami w danym katalogu?
Muszę przejrzeć wszystkie .asm
pliki w danym katalogu i wykonać na nich pewne czynności.
Jak można to zrobić w skuteczny sposób?
6 answers
Oryginalna odpowiedź:
for filename in os.listdir(directory):
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
Python w wersji 3.6 powyższej odpowiedzi, za pomocą os
- zakładając, że masz ścieżkę katalogu jako obiekt str
w zmiennej o nazwie directory_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
Lub rekurencyjnie, używając 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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-08 02:13:56
Możesz spróbować użyć glob module
import glob
for filepath in glob.iglob('my_dir/*.asm'):
print(filepath)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-04 10:31:34
Będzie to iterować nad wszystkimi plikami potomnymi, a nie tylko bezpośrednimi dziećmi katalogu:
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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-26 15:13:41
Python 3.4 i nowsze oferują pathlib w bibliotece standardowej. Można zrobić:
from pathlib import Path
asm_pths = [pth for pth in Path.cwd().iterdir()
if pth.suffix == '.asm']
Lub jeśli nie podoba Ci się składanie listy:
asm_paths = []
for pth in Path.cwd().iterdir():
if pth.suffix == '.asm':
asm_pths.append(pth)
Path
obiekty mogą być łatwo konwertowane na ciągi znaków.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-26 14:41:27
Nie jestem do końca zadowolony z tej implementacji, chciałem mieć własny konstruktor, który robi DirectoryIndex._make(next(os.walk(input_path)))
tak, że możesz po prostu przekazać ścieżkę, dla której chcesz listę plików. Edycje mile widziane!
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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-02 15:49:27
Oto jak przeglądam pliki w Pythonie:
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
ŻADNA Z TYCH TECHNIK NIE GWARANTUJE ZAMAWIANIA ITERACJI
Tak, super nieprzewidywalny. Zauważ, że sortuję nazwy plików, co jest ważne, jeśli liczy się kolejność plików, tj. dla klatek wideo lub gromadzenia danych zależnych od czasu. Pamiętaj jednak, aby umieścić indeksy w nazwach plików!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 21:34:08