2009-06-15 74 views
0

我在Python 2.6.2中编写了一个脚本,用于扫描SVG的目录并在它们太大时调整它们的大小。我在家用机器上(Vista,Python 2.6.2)编写了这个文件,并处理了几个没有问题的文件夹。今天,我在我的工作计算机(XP SP2,Python 2.6.2)上尝试了这一点,即使文件位于目录中,每个文件都会收到IOErrors。我想我已经尝试了一切,并不确定从哪里出发。我是初学者,所以这可能很简单。任何帮助,将不胜感激。尽管存在文件,但IOError“没有这样的文件或文件夹”

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

如果您不使用try,那么它会更有用 - 除了那里之外,只是向我们展示了导致错误的原因。 – SilentGhost 2009-06-15 13:12:21

回答

1

它看起来像我缺少一个os.path.join(path, tfile)以获取要打开的文件的完整路径。目前它只适用于当前目录中的文件。

+0

SUCCESS !!谢谢你,先生!你是一个绅士和学者。 – nosleep 2009-06-15 13:30:58

0

也许这是一个安全问题?也许你没有权限在文件夹中创建文件

相关问题