Просмотр файлов и подпапок в Python
Я бы хотел просмотреть текущую папку и все ее подпапки и получить все файлы с расширениями .htm |.html. Я узнал, что можно узнать, является ли объект таким файлом или файлом, как это:
import os
dirList = os.listdir("./") # current directory
for dir in dirList:
if os.path.isdir(dir) == True:
# I don't know how to get into this dir and do the same thing here
else:
# I got file and i can regexp if it is .htm|html
и в конце я хотел бы иметь все файлы и их пути в массиве. Возможно ли что-то подобное?
Ответы
Ответ 1
Вы можете использовать os.walk()
для рекурсивной итерации по каталогу и всем его подкаталогам:
for root, dirs, files in os.walk(path):
for name in files:
if name.endswith((".html", ".htm")):
# whatever
Чтобы составить список этих имен, вы можете использовать понимание списка:
htmlfiles = [os.path.join(root, name)
for root, dirs, files in os.walk(path)
for name in files
if name.endswith((".html", ".htm"))]
Ответ 2
У меня была похожая вещь для работы, и вот как я это сделал.
import os
rootdir = os.getcwd()
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(".html"):
print (filepath)
Надеюсь это поможет.
Ответ 3
Используйте newDirName = os.path.abspath(dir)
, чтобы создать полное имя пути к каталогу для этого подкаталога, а затем перечислите его содержимое, как это было сделано с родителем (т.е. newDirList = os.listDir(newDirName)
)
Вы можете создать отдельный метод фрагмента кода и вызвать его рекурсивно через структуру подкаталога. Первый параметр - это путь к каталогу. Это изменится для каждого подкаталога.
Этот ответ основан на документации версии 1.1.1 библиотеки Python. Это пример хорошей модели в действии на стр. 228 Справочника библиотеки Python 3.1.1 (Глава 10 - Доступ к файлам и каталогам).
Удачи!
Ответ 4
Слегка измененная версия решения Свена Марнаха.
import os
folder_location = 'C:\SomeFolderName'
file_list = create_file_list(folder_location)
def create_file_list(path):
return_list = []
for filenames in os.walk(path):
for file_list in filenames:
for file_name in file_list:
if file_name.endswith((".txt")):
return_list.append(file_name)
return return_list
Ответ 5
В питоне 3 вы можете использовать os.scandir():
for i in os.scandir(path):
if i.is_file():
print('File: ' + i.path)
elif i.is_dir():
print('Folder: ' + i.path)