【发布时间】:2015-03-24 10:27:49
【问题描述】:
我需要浏览给定目录的子目录,搜索 excel 文件,然后读取它们的工作表名称。当循环找到加密文件时会出现问题。我试图用 xlrd 和 pandas 读取文件。但我得到一个错误:
xlrd.XLRDError 工作簿已加密
我对 pass 方法做了一个例外,但如果我这样做了,循环会在此时中断并且程序停止。我该怎么做才能传递该错误并继续下一个文件?在折叠程序的方法 xlrd.open_workbook 之前,有什么方法可以检查文件是否已加密?或者是否可以在我可以传递错误并继续前进的情况下进行例外处理?
import codecs
import xlrd
import os
import Tkinter
import tkFileDialog
def pyrexcel(path,file,list):
print 'do now: ' + path + '/' + file
workbook = xlrd.open_workbook(path + '/' + file, encoding_override='windows-1250')
sheet_names = workbook.sheet_names()
for sheet in sheet_names:
list.append(path+"/"+file+"/"+sheet)
def finder(destin,listka,list):
for pliczek in os.listdir(destin):
if os.path.isdir(destin +"/" +pliczek):
finder(destin +"/" +pliczek,listka,list)
elif pliczek[-4:] == ".xls":
pyrexcel(destin,pliczek,list)
elif pliczek[-4:] == ".rar" or pliczek[-4:] == ".zip":
listka.append(destin+pliczek)
root = Tkinter.Tk()
root.withdraw()
listaExcel = []
listaZip = []
dirname = tkFileDialog.askdirectory(parent=root, initialdir="/", title='choose dir to iterate')
print "you choose: " + dirname
try:
finder(dirname,listaZip,listaExcel)
except xlrd.XLRDError as e:
print e.message
pass
plik = codecs.open((dirname + "/listaZIP.txt"), 'w', "utf-8")
for item in listaZip:
plik.write("%s\n" % item)
plik.close()
plik = codecs.open((dirname + "/listaExcel.txt"), 'w', "utf-8")
for item in listaExcel:
plik.write("%s\n" % item)
plik.close()
【问题讨论】:
标签: python excel encryption exception-handling xlrd