Объект Python 'function' не имеет атрибута 'GzipFile'

Я пишу функцию для сжатия файла следующим образом:

def gzip(filename):
    '''Gzip the given file and then remove original file.'''
    r_file = open(filename, 'r')
    w_file = gzip.GzipFile(filename + '.gz', 'w', 9)
    w_file.write(r_file.read())
    w_file.flush()
    w_file.close()
    r_file.close()
    os.unlink(filename) 

Однако, когда я запускаю свою программу, я получаю сообщение об ошибке:

У объекта 'function' нет атрибута 'GzipFile'.

Что я сделал не так? Спасибо заранее!

2 ответа

Вы назвали свою функцию gzip который так же, как gzip модуль. Теперь, когда вы запускаете свою функцию, Python захватывает саму функцию (думайте рекурсию), а не gzip модуль, который вы затеняли. Есть два решения. 1) переименуйте функцию:

def gzip_func():
    ...

2) присвойте модулю другое локальное имя при импорте:

import gzip as gzip_mod
...
def gzip():
    ...
    w_file = gzip_mod.GzipFile(filename + '.gz', 'w', 9)

Вы используете gzip модуль, но ваша функция имеет то же имя, поэтому она перезаписывает модуль.
Либо вы должны переименовать функцию или использовать что-то вроде import gzip as gzip_module,

Другие вопросы по тегам