Найдите тип файла за обработчиком файла в python

Я сталкиваюсь с проблемой, чтобы выяснить, какой тип файла стоит за обработчиком файла.

Мне это нужно, потому что мой apache_log_parser не смог разобрать строку и вся программа вышла из строя:

Traceback (most recent call last):   File "VirtualEnvs/moslog/bin/mosloganalisys.py", line 108, in
 <module>
     totalines = count_agent(logfilehandler,agentcount,totalines)   File "VirtualEnvs/moslog/bin/mosloganalisys.py", line
 27, in count_agent
     log_line_data = line_parser(line)   File "VirtualEnvs/moslog/lib/python2.7/site-packages/apache_log_parser/__init__.py",
 line 225, in parse
     raise LineDoesntMatchException(log_line=log_line, regex=self.log_line_regex.pattern)

Причина была в том, что обработчик файла указывал на файл gz. Неважно, использовал ли я библиотеку gzip для распаковки файла, потому что это был двойной сжатый файл *.gz.gz, и, следовательно, распакованный файл был в свою очередь другим файлом gziped.

Поэтому я пытаюсь использовать библиотеку python-magic, чтобы узнать тип файла, но кажется, что требуется имя файла.

     72         """
     73         self._thread_check()
---> 74         if not os.path.exists(filename):
     75             raise IOError("File does not exist: " + filename)
     76 

/usr/lib64/python2.7/genericpath.pyc in exists(path)
     16     """Test whether a path exists.  Returns False for broken symbolic links"""
     17     try:
---> 18         os.stat(path)
     19     except os.error:
     20         return False

Я уже реализовал оператор try: / wait: но это не решает проблему обработки большого количества бесполезных строк.

Что вы предлагаете делать? Спасибо

1 ответ

Глядя лучше в волшебную библиотеку, я нашел способ сделать это:

logfile=open('workspace/mosloganalysis/access.log.1429142400','r').read(1024)
print logfile
magic.from_buffer(logfile)

Вам просто нужно открыть файл, читая первые 1024 символа и используя функцию magic.from_buffer

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