Как я могу перечислить все файлы каталога в Python и добавить их в list?
Переведено автоматически
Ответ 1
os.listdir() возвращает все, что находится внутри каталога, включая как файлы, так и каталоги.
os.path's isfile() может использоваться только для перечисления файлов:
from os import listdir from os.path import isfile, join onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]
В качестве альтернативы, os.walk()выдает два списка для каждого каталога, который он посещает - один для файлов и один для каталогов. Если вам нужен только верхний каталог, вы можете разорвать его при первом выходе:
from os import walk
f = [] for (dirpath, dirnames, filenames) in walk(mypath): f.extend(filenames) break
или, короче:
from os import walk
filenames = next(walk(mypath), (None, None, []))[2] # [] if no file
Ответ 2
Я предпочитаю использовать glob модуль, поскольку он выполняет сопоставление с шаблоном и расширение.
import glob print(glob.glob("/home/adam/*"))
Он выполняет сопоставление с шаблоном интуитивно
import glob # All files and directories ending with .txt and that don't begin with a dot: print(glob.glob("/home/adam/*.txt")) # All files and directories ending with .txt with depth of 2 folders, ignoring names beginning with a dot: print(glob.glob("/home/adam/*/*.txt"))
Он вернет список с запрошенными файлами и каталогами:
Обратите внимание, что glob игнорирует файлы и каталоги, начинающиеся с точки ., поскольку они считаются скрытыми файлами и каталогами, если только шаблон не является чем-то вроде .*.
Используйте glob.escape для экранирования строк, которые не должны быть шаблонами:
операционная система.walk возвращает root, список каталогов и список файлов, поэтому я распаковал их в r, d, f в цикле for; затем он ищет другие файлы и каталоги во вложенных папках root и так далее, пока вложенных папок не останется.
import os
# Getting the current work directory (cwd) thisdir = os.getcwd()
# r=root, d=directories, f = files for r, d, f in os.walk(thisdir): for file in f: if file.endswith(".docx"): print(os.path.join(r, file))
Для перехода вверх по дереву каталогов
# Method 1 x = os.listdir('..')
# Method 2 x= os.listdir('/')
Получить файлы определенного подкаталога с помощью os.listdir()
arr_txt = [x for x in os.listdir() if x.endswith(".txt")]
Использование glob для получения полного пути к файлам
from path import path from glob import glob
x = [path(f).abspath() for f in glob("F:\\*.txt")]
Использование os.path.isfile для исключения каталогов в списке
import os.path listOfFiles = [f for f in os.listdir() if os.path.isfile(f)]
Использование pathlib из Python 3.4
import pathlib
flist = [] for p in pathlib.Path('.').iterdir(): if p.is_file(): print(p) flist.append(p)
С list comprehension:
flist = [p for p in pathlib.Path('.').iterdir() if p.is_file()]
Используйте метод glob в pathlib.Path()
import pathlib
py = pathlib.Path().glob("*.py")
Получить все и только файлы с помощью os.walk: проверяет только третий возвращаемый элемент, т. Е. Список файлов
import os x = [i[2] for i in os.walk('.')] y=[] for t in x: for f in t: y.append(f)
Получить только файлы с помощью next в каталоге: возвращает только файл в корневой папке
import os x = next(os.walk('F://python'))[2]
Получите только каталоги с помощью next и перейдите в каталог, потому что в элементе [1] есть только папки
import os next(os.walk('F://python'))[1] # for the current dir use ('.')
>>> ['python3','others']
Получить все subdir имена с помощью walk
for r,d,f in os.walk("F:\\_python"): for dirs in d: print(dirs)
os.scandir() из Python 3.5 и выше
import os x = [f.name for f in os.scandir() if f.is_file()]
# Another example with `scandir` (a little variation from docs.python.org) # This one is more efficient than `os.listdir`. # In this case, it shows the files only in the current directory # where the script is executed.
import os with os.scandir() as i: for entry in i: if entry.is_file(): print(entry.name)
Ответ 4
import os os.listdir("somedirectory")
вернет список всех файлов и каталогов в "somedirectory".