2014-07-24 2 views
-2

Мне нужно иметь дело с большим количеством файлов. Как я могу различить, какой из них является файлом PDF, а какой нет? Я запускаю Python в Windows. Спасибо за помощь, пожалуйста.Как отличить PDF-файл от других файлов?

+1

Если вы не можете доверять имени файла и хотите проверить содержимое, см. Http://stackoverflow.com/q/10937350/ –

ответ

1

Если вы хотят полагаться на расширение файла, вы можете использовать следующий код:

#!python3 

import os 

def isPDFfile(fname): 
    name, ext = os.path.splitext(fname) 
    return ext.lower() == '.pdf' 

if __name__ == '__main__': 
    for fname in os.listdir('.'): 
     if isPDFfile(fname): 
      print(fname, 'is PDF file.') 
     else: 
      print(fname, 'is not PDF file.') 

Если вы хотите быть уверены, что имя не является каталогом, вы можете добавить тест:

def isPDFfile(fname): 
    if not os.path.isfile(fname): 
     return False 
    name, ext = os.path.splitext(fname) 
    return ext.lower() == '.pdf' 

Существует также функция os.walk(), которая выполняет итерацию через файлы в каталоге. Если вы хотите, чтобы найти все PDF-файлы внутри каталога, вы можете написать свой собственный специализированный гуляем, который будет возвращать только PDF файлы:

def walkPDFfiles(directory): 
    for dirpath, dirs, files in os.walk(directory): 
     for fname in files: 
      name, ext = os.path.splitext(fname) 
      if ext.lower() == '.pdf': 
       yield os.path.join(dirpath, fname) 

И вы можете использовать его в петле, как что:

for fname in walkPDFfiles('.'): 
    print(fname, 'is PDF file.') 
+0

Что делать, если вопрос был о файлах .exe? –

+1

@begueradj: при поиске файлов с другим расширением код должен быть изменен. Расширение (ы) можно было бы передать через аргумент, если захотите. – pepr

1

, если вы не доверяете расширение имени файла, вы можете прочитать первые несколько байт файла и тест, если он начинается с %PDF-

Как так:

with open(fn, 'rb') as fin: 
    line=fin.read(20) 
    if line.startswith('%PDF-'): 
     # its a pdf file... 
     # you can parse the version of PDF by the versioning x.x after %PDF-x.x 
    else: 
     # it is not a pdf file 
Смежные вопросы