tags:

views:

88

answers:

2

I wrote a script in Python 2.6.2 that scans a directory for SVG's and resizes them if they are too large. I wrote this on my home machine (Vista, Python 2.6.2) and processed a few folders with no problems. Today, I tried this on my work computer (XP SP2, Python 2.6.2) and I get IOErrors for every file, even though files are in the directory. I think I've tried everything, and am unsure where to go from here. I am a beginner so this may be something simple. Any help would be appreciated.

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
A: 

Perhaps it's a security issue? Perhaps you don't have the rights to create files in the folder

Conrad
+1  A: 

It looks to me like you are missing a os.path.join(path, tfile) to get the full path to the file you want to open. Currently it should only work for files in the current directory.

sth
SUCCESS!! Thank you sir! You are a gentleman and a scholar.
nosleep