И наоборот: вы хотите, чтобы класс представлял данные одного файла, а , а не - класс, представляющий их совокупность. Для этого вы просто создаете обычный список и помещаете в него экземпляры файловых данных. Вы можете использовать обычные функции для создания этих списков.
fileName
- плохой выбор имени, потому что класс представляет больше, чем имя файла. Называть его file
тоже плохая идея, потому что это имя встроенной вещи, которую вы используете для фактического чтения из файлов. :)
Наличие отдельных полей 'name' и 'path' является избыточным: имя является частью пути. Если вы не хотите явно разделить это - для этого используйте os.path.split
.
Вместо создания полноценного класса для файловых данных, вы можете попробовать использовать namedtuple
вместо этого - это избавит вас от написания всей классовой таблицы и просто позволит вам перейти к делу обращения к .path
и .size
файла.
Что-то вроде:
from collections import namedtuple
# We define our data type like this:
fileData = namedtuple('fileData', ('name', 'path', 'size'))
# Now we can create an instance of it:
def pathToData(pathAndName):
path, name = os.path.split(pathAndName)
size = os.path.getsize(pathAndName)
return fileData(name, path, size)
# Or a whole bunch at once, using a list comprehension:
def pathsToData(filePaths):
return [pathToData(p) for p in filePaths]
# There is no need to do all the 'append' logic yourself.
Чтобы обработать дерево каталогов с подпапками и прочим, вам нужно поискать функцию os.walk
.