Мне нужна помощь с классами - класс для отображения имен файлов, размера файла, пути и всего остального - PullRequest
1 голос
/ 26 июля 2011

Хорошо, у меня есть гигантский список файлов, которые я хотел бы скопировать из одного места в другое. Я хотел бы сделать класс для хранения всех этих данных. Я хочу иметь возможность вызывать два экземпляра класса, один с файлами на одном диске, другой с файлами на другом диске. Затем я получаю размер, независимо от того, есть ли на другом диске аналогичный файл и т. Д., И затем копирую все. Я не знаю, нужен ли мне класс fileName, или я могу поместить все это в fileNames. Любые указатели или советы? У меня есть общая идея, или я ухожу?

Это все, что у меня есть, поскольку я застрял (занятия для меня были сложным концептуальным скачком)

class fileNames:
    def __init__(self):
        fileSizeList = []
        filePathList = []
        fileList = []
        fileNameList.apped(fileName.name)
        fileSizeList.append(fileName.size)
        filePathList.append(fileName.path)

    def makeSizeList(fileList):
        for name in fileList:
            fileSizeList.append(os.path.getsize(os.path.join(name.path, name))))


class fileName:
    def __init__(self, name, path, size):
        self.name = name
        self.path = path
        self.size = size

1 Ответ

1 голос
/ 26 июля 2011

И наоборот: вы хотите, чтобы класс представлял данные одного файла, а , а не - класс, представляющий их совокупность. Для этого вы просто создаете обычный список и помещаете в него экземпляры файловых данных. Вы можете использовать обычные функции для создания этих списков.

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...