2015-05-21 1 views
0

Я пишу скрипт python, который будет читать расширения файлов, типы MIME и подписи файлов, чтобы я мог определить, отсутствуют ли какие-либо из них или повреждены, а также установить типы файлов в данный каталог.Ошибка чтения MIME-типов с использованием Python

До сих пор я получил:

import magic, os 

def get_ext(dirPath): 
    foldercount = 0 
    filecount = 0 
    while True: 
     if os.path.exists(dirPath): 
      break 
     else: 
      print "Directory doesn't exist!" 
      continue 
    includePath = raw_input("Do you want to include the complete path to the files in the output?: Y/N\n") 

    if includePath.upper() == "Y": 
     for rootfolder, subfolders, files in os.walk(dirPath): 
      foldercount += len(subfolders) 
      filecount += len(files) 
      for f in files: 
       name = f 
       path = os.path.join(rootfolder, f) 
       ext = os.path.splitext(f)[1] 
       if ext != "": 
        print "Filename: " + str(path) + "\t\tExtension: " + str(ext) + "\tMIME: " 
       else: 
        print "Filename: " + str(path) + "\t\tExtension: no extension found" 
     print "Found {0} files in {1} folders".format(filecount, foldercount) 

    elif includePath.upper() == "N": 
     for rootfolder, subfolders, files in os.walk(dirPath): 
      foldercount += len(subfolders) 
      for f in files: 
       name = f 
       path = os.path.join(rootfolder, f) 
       ext = os.path.splitext(f)[1] 
       if ext != "": 
        print "Filename: " + str(name) + "\t\tExtension: " + str(ext) 
       else: 
        print "Filename: " + str(name) + "\t\tExtension: no extension found" 
     print "Found in {0} folders".format(foldercount) 

    else: 
     print "Wrong input, try again" 


def getMagic(dirPath): 
    while True: 
     if os.path.exists(dirPath): 
      break 
     else: 
      print "Directory doesn't exist!" 
      continue 
    for rootfolder, subfolders, files in os.walk(dirPath): 
     for f in files: 
      bestand = f 
      mymagic = magic.Magic(mime=True) 
      mytype = mymagic.from_file(bestand) 
      print mytype 
      print ("The MIME type of the file %s is %s" %(bestand, mytype)) 

dirPath = raw_input("Directory to check files in: ")   
get_ext(dirPath)  
getMagic(dirPath) 

get_ext() работает, как положено, дав мне имя файлов и расширение. Однако, когда я пытаюсь извлечь тип MIME это как-то выдает следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "/home/nick/workspace/Proto/asdfasdf.py", line 80, in <module> 
    getMagic(dirPath)  
    File "/home/nick/workspace/Proto/asdfasdf.py", line 74, in getMagic 
    mytype = mymagic.from_file(bestand) 
    File "/usr/local/lib/python2.7/dist-packages/magic.py", line 75, in  from_file 
    raise IOError("File does not exist: " + filename) 
IOError: File does not exist: 2 

Я знаю, за то, что файл «2» действительно существует, будучи простой текстовый документ. Это дает мне MIME, если я жестко задаю путь к файлу в скрипте, но я хочу, чтобы скрипт проходил через каталог, предоставляющий мне все файлы в нем.

Может кто-нибудь объяснить, почему он выбрасывает эту ошибку и как исправить эту проблему? Я использую питон магии модуль, установленный с помощью пипа установить питон-магию

Благодарность

ответ

0

Из документации os.walk мы можем видеть, что

filenames is a list of the names of the non-directory files in dirpath. Note that the names in the lists contain no path components. To get a full path (which begins with top) to a file or directory in dirpath, do os.path.join(dirpath, name).

Вам нужно получить полный путь как

bestand = os.path.join(rootfolder, f) 
+0

изменено bestand = os.join (корневой каталог, f) на os.path.join. В противном случае это сработало отлично, спасибо! – Nick