Невозможно использовать метод getsize с возвращенными файлами os.walk()
Я пытаюсь создать небольшую программу, которая просматривает каталог (так как я хочу рекурсивно найти все файлы в подкаталогах, которые я использую os.walk()).
Вот мой код:
import os
import os.path
filesList=[]
path = "C:\\Users\Robin\Documents"
for(root,dirs,files) in os.walk(path):
for file in files:
filesList+=file
Затем я пытаюсь использовать метод os.path.getsize() для элементов filesList, но он не работает.
Действительно, я понимаю, что этот код заполняет список файлов List списком символов. Я не знаю, что делать, я пробовал несколько других вещей, таких как:
for(root,dirs,files) in os.walk(path):
filesList+=[file for file in os.listdir(root) if os.path.isfile(file)]
Это дает мне файлы, но только один, который даже не виден при поиске в каталоге.
Может кто-нибудь объяснить мне, как получить файлы, с которыми мы можем работать (то есть получить их размер, хэшировать или изменить их...) с помощью os.walk? Я новичок в Python, и я не очень понимаю, как использовать os.walk().
2 ответа
Я подозреваю, что проблема, с которой вы сталкиваетесь, заключается в том, что file
содержит только имя файла, а не каталоги, по которым вы должны перемещаться из начальной папки. Вы должны использовать os.path.join
объединить имя файла с папкой, в которой он находится, root
значение, полученное от os.walk
:
for(root,dirs,files) in os.walk(path):
for file in files:
filesList.append(os.path.join(root, file))
Теперь все имена файлов в filesList
будет приемлемым для os.path.getsize
и другие функции (например, open
).
Я также исправил вторичную проблему, которая заключается в том, что вы используете +=
расширить список не будет работать так, как вы хотели. Вам нужно будет обернуть новый путь к файлу в списке, чтобы это работало. С помощью append
больше подходит для добавления одного значения в конец списка.
Если вы хотите получить список файлов, включая путь, используйте:
for(root, dirs, files) in os.walk(path):
fullpaths = [os.path.join(root, fil) for fil in files]
filesList+=fullpaths