我在Python 2.6.2中编写了一个脚本,用于扫描目录中的SVG,如果它们太大则调整它们的大小。我在我的家用机器(Vista,Python 2.6.2)上写了这个,并处理了几个没有问题的文件夹。今天,我在我的工作计算机上尝试了这个(XP SP2,Python 2.6.2),我为每个文件都获得了IOErrors,即使文件在目录中也是如此。我想我已经尝试了一切,我不确定从哪里开始。我是初学者,所以这可能很简单。任何帮助将不胜感激。
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 :(得分:1)
在我看来,您错过了os.path.join(path, tfile)
来获取要打开的文件的完整路径。目前它应该只适用于当前目录中的文件。
答案 1 :(得分:0)
也许这是一个安全问题?也许您无权在文件夹
中创建文件