2009-06-15 8 views
0

J'ai écrit un script dans Python 2.6.2 qui scanne un répertoire pour les SVG et les redimensionne s'ils sont trop grands. J'ai écrit ceci sur ma machine à la maison (Vista, Python 2.6.2) et ai traité quelques dossiers sans problèmes. Aujourd'hui, j'ai essayé ceci sur mon ordinateur de travail (XP SP2, Python 2.6.2) et je reçois IOErrors pour chaque fichier, même si les fichiers sont dans le répertoire. Je pense que j'ai tout essayé, et je ne sais pas où aller à partir d'ici. Je suis un débutant donc cela peut être quelque chose de simple. Toute aide serait appréciée.IOError "aucun fichier ou dossier de ce type" même si des fichiers sont présents

import xml.etree.ElementTree as ET 
import os 
import tkFileDialog 

#-------------------------------------- 
#~~~variables 
#-------------------------------------- 
max_height = 500 
max_width = 428 
extList = ["svg"] 
proc_count = 0 
resize_count = 0 

#-------------------------------------- 
#~~~functions 
#-------------------------------------- 
def landscape_or_portrait(): 
    resize_count +=1 
    if float(main_width_old)/float(main_height_old) >= 1.0: 
     print "picture is landscape" 
     resize_width() 
    else: 
     print "picture is not landscape" 
     resize_height() 
    return 

def resize_height(): 
    print "picture too tall" 
    #calculate viewBox and height 
    viewBox_height_new = max_height 
    scaleFactor = (float(main_height_old) - max_height)/max_height 
    viewBox_width_new = float(main_width_old) * scaleFactor 
    #calculate main width and height 
    main_height_new = str(viewBox_height_new) + "px" 
    main_width_new = str(viewBox_width_new) + "px" 
    viewBox = "0 0 " + str(viewBox_width_new) + " " + str(viewBox_height_new) 
    inputFile = file(tfile, 'r') 
    data = inputFile.read() 
    inputFile.close() 
    data = data.replace(str(tmain_height_old), str(main_height_new)) 
    data = data.replace(str(tmain_width_old), str(main_width_new)) 
    #data = data.replace(str(tviewBox), str(viewBox)) 
    outputFile = file(tfile, 'w') 
    outputFile.write(data) 
    outputFile.close() 
    return 

def resize_width(): 
    print "picture too wide" 
    #calculate viewBox width and height 
    viewBox_width_new = max_width 
    scaleFactor = (float(main_width_old) - max_width)/max_width 
    viewBox_height_new = float(main_height_old) * scaleFactor 
    #calculate main width and height 
    main_height_new = str(viewBox_height_new) + "px" 
    main_width_new = str(viewBox_width_new) + "px" 
    viewBox = "0 0 " + str(viewBox_width_new) + " " + str(viewBox_height_new) 
    inputFile = file(tfile, 'r') 
    data = inputFile.read() 
    inputFile.close() 
    data = data.replace(str(tmain_height_old), str(main_height_new)) 
    data = data.replace(str(tmain_width_old), str(main_width_new)) 
    #data = data.replace(str(tviewBox), str(viewBox)) 
    outputFile = file(tfile, 'w') 
    outputFile.write(data) 
    outputFile.close() 
    return 

#-------------------------------------- 
#~~~operations 
#-------------------------------------- 
path = tkFileDialog.askdirectory() 

for tfile in os.listdir(path): 
    #print tfile 
    t2file = tfile 
    if tfile.find(".") >= 0: 
     try : 
      if t2file.split(".")[1] in extList: 
       print "now processing " + tfile 
       tree = ET.parse(tfile) 
       proc_count+=1 

       # Get the values of the root(svg) attributes 
       root = tree.getroot() 
       tmain_height_old = root.get("height") 
       tmain_width_old = root.get("width") 
       tviewBox = root.get("viewBox") 

       #clean up variables, remove px for float conversion 
       main_height_old = tmain_height_old.replace("px", "", 1) 
       main_width_old = tmain_width_old.replace("px", "", 1) 

       #check if they are too large 
       if float(main_height_old) > max_height or float(main_width_old) > max_width: 
        landscape_or_portrait() 
     except Exception,e: 
      print e 
+0

il serait plus utile si vous n'utilisez pas try-excepté là mais juste nous a montré ce qui cause l'erreur. – SilentGhost

Répondre

1

Il me semble qu'il vous manque un os.path.join(path, tfile) pour obtenir le chemin d'accès complet au fichier que vous souhaitez ouvrir. Actuellement, cela ne devrait fonctionner que pour les fichiers du répertoire courant.

+0

SUCCÈS !! Merci Monsieur! Vous êtes un gentleman et un érudit. – nosleep

0

Peut-être que c'est un problème de sécurité? Peut-être que vous n'avez pas les droits pour créer des fichiers dans le dossier

Questions connexes