Как возвращение данных правильно

Я новый программируя и нахожусь в вызове реализации увеличительного backup файлов.

Я основался на парадигме программирования, ориентируемой на объекты и я попробовал работать используя хорошую практику "DRY" (Don't repeat yourself), чтобы избегать повторять мой код.

Я комментирую им, как я считаю распространенным мой код:

Я храню в архиве clases_main.py

import glob
import os


class So:
    pass

class Folder:

    def set_directory(self, directory):
        self.directory = directory
        return directory


class File(Folder, So):

    def __init__(self, directory, extension):
        self.extension = self.set_extension(extension)
        self.directory = self.set_directory(directory)

    def set_extension(self, extension):
        self.extension = extension
        return  extension

    def buscar_archivos(self, directory, extension):
        os.chdir(directory)
        archivos = glob.glob(extension)
        for i in range(len(archivos)):
            filenames = archivos[i]
        return filenames

С другой стороны у меня есть добавочный файл backup_incremental.py

from clases_main import File

directorio = 'D:/'
extension = '*.txt'

# Objeto de Instancia
search_archivos = File(directorio, extension)


archivos = search_archivos.buscar_archivos(directorio, extension)

for i in range(len(archivos)):
    print(archivos)

Мне хотелось бы знать, поскольку я могу искать файлы txt этого каталога и показывать имена, когда я выполняю файл backup_incremental.py, когда я делаю for в этом файле, имена приходят повторенные по какому-то разуму, мне хотелось бы начинать учиться показывать также данные в json, если они могут включать мне какой-то совет на этом также, я им буду благодарен чрезвычайно.

Edit: Я обновил код, чтобы не печатать так

Привет и спасибо!

3
задан 03.01.2017, 00:59
0 ответов

Ты печатаешь больше в методе buscar_archivos:

import glob
import os

class File(object):

    def __init__(self, directory, extension):
        self.extension = extension
        self.directory = directory

    def buscar_archivos(self):
        os.chdir(self.directory)
        return glob.glob(self.extension)                            

И в backup_incremental.py, используй set, чтобы удалять дубликаты:

from clases_main import File

directorio = 'D:/'
extension = '*.txt'

# Objeto de Instancia
search_archivos = File(directorio,extension)


archivos = search_archivos.buscar_archivos()

for archivo in set(archivos):
    print(archivo)                                                    
3
ответ дан 03.12.2019, 17:53
  • 1
    спасибо за твой ответ, если я его достаю print файл с классами, также for backup_incremental.py возвращает все файлы единственного имени. –  03.01.2017, 00:41

Ну, давайте начинать с DRY.

В python он не необходим не создавать getters даже сеттеров, а следовательно ты можешь опускать методы, которые начинаются с set _, а именно:

...
class Directorio(object):
    def __init__(self, directory, extension):
        self.extension = extension
        self.directory = directory

    def archivos(self):
        directory = self.directory  # obtienes el directorio desde el __init__
        extension = self.extension  # obtienes la extension desde el __init__
        os.chdir(directory)
        archivos = glob.glob(extension)
        return archivos  # retorna la lista creada


# Luego creas la instancia
directorio = 'D:/'
extension = '*.txt'

search_archivos = Directorio(directorio, extension)
archivos = search_archivos.archivos()
for archivo in archivos:
    print(archivo)
...

Результат показывает тебя два раза на экране, потому что ты звонил два раза в print()

Чтобы показывать в JSON, ты должен добавлять import и следующий метод к твоему классу:

...
def to_json(self):
    import json
    archivos = self.archivos()
    my_json = {}
    for archivo in archivos:
        _file = archivo.split('/')
        file = _file[len(_file) - 1]
        _file.pop()
        directory = '/'.join(_file)
        if directory in my_json:
            my_json[directory].append(file)
        else:
            if directory == '':
                directory = self.directory
            my_json[directory] = [file]
    return json.dumps(my_json)
...

Чтобы пробегать json, (как converstiste в string, чтобы это перемещать в json):

...
# Debes pasar el json a diccionario de python
my_json = json.loads(search_archivos.to_json())

for ruta in my_json:
   print("Archivos en '%(ruta)s': %(archivos)s" % {'ruta': ruta, 'archivos': ', '.join(my_json[ruta])})
...
2
ответ дан 03.12.2019, 17:53
  • 1
    Привет German спасибо, ты помогаешь мне понимать эту часть твоего có я говорю? class Каталог (Object): Переводчик говорит мне: NameError: ямс ' Object' is not defined –  03.01.2017, 01:02
  • 2
    Deberí чтобы быть object, в строчных буквах –  03.01.2017, 01:04
  • 3
    Я вижу, что он не предлагает тост má s эта ошибка, но факт использования object означает, что стоимость, которая возвращается será типа objecto? Или для того, чтобы он используется конкретно? С другой стороны чтобы использовать funció n to_json как deberí чтобы изменять этот print, который añ adido я? Спасибо –  03.01.2017, 01:13
  • 4
    @secnot, уже corregí спасибо –  03.01.2017, 01:17
  • 5
    То, что приносит класс в paré ntesis - классы тех, которые он получает в наследство, object - класс корень в python, хотя не обязательно помещать ее, está рекомендуемый. –  03.01.2017, 01:20