2013-12-08 3 views
0

Я пытаюсь перебрать все zipped-файлы в каталог и сохранить его размер. Я видел, что могу сделать это, не извлекая его, но когда я попытаюсь сделать это, я получаю ОШИБКУ: «IOError: [Errno 2] Нет такого файла или каталога: 'first_gz_file. *. Gz'" Когда я ища его, я могу найти его, поэтому я не понимаю, почему я получаю ошибку.Получите размер всех файлов .gz в каталоге и подкаталогах - python

это мой код:

for directories in chosen_dirs: 
    for root,dir,file in os.walk(directories): 
     for o in file: 
      if o.endswith('.gz'): 
       print (o) 
       input_file = gzip.open(o, 'rb') 
       try: 
        print(input_file.size) 
       finally: 
        input_file.close() 

это правильно печатать уплотнительные файлы (если удалить строки ниже него)

Что идет не так, там? спасибо

+0

См. Библиотеку glob http://docs.python.org/3/library/glob.html – uselpa

+0

'glob.glob' ищет только указанный каталог, а не его подкаталоги. –

ответ

2

Не открывать файл использовать os.path.getsize(path)

Как за то, что идет не так быстро проверка показывает, что объект GZIP не имеет метод размер:

>>> g = gzip.open('temp.gz', 'wb') 
>>> dir(g) 
['__abstractmethods__', '__class__', '__delattr__', '__doc__', '__enter__', 
'__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', 
'__metaclass__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_abc_cache', 
'_abc_negative_cache', '_abc_negative_cache_version', '_abc_registry', 
'_add_read_data', '_checkClosed', '_checkReadable', '_checkSeekable', 
'_checkWritable', '_check_closed', '_init_read', '_init_write', '_read', 
'_read_eof', '_read_gzip_header', '_unread', '_write_gzip_header', 'close', 
'closed', 'detach', 'filename', 'fileno', 'flush', 'isatty', 'max_read_chunk', 
'myfileobj', 'next', 'read', 'read1', 'readable', 'readinto', 'readline', 
'readlines', 'rewind', 'seek', 'seekable', 'tell', 'truncate', 'writable', 
'write', 'writelines'] 
>>> 

Я бы добавить не использовать file и dir как имена переменных, так как они являются зарезервированными словами в python, которые вам могут понадобиться использовать в исходном контексте. Они оба также перечислены в контексте, который вы используете, поэтому используйте root, dirs, files или root, dir_list file_list для наглядности.

Смежные вопросы