【问题标题】:XLRD/Python: Encrypte Excel or make exceptionXLRD/Python:加密 Excel 或产生异常
【发布时间】: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


    【解决方案1】:

    continue 应该完成您想要的,如下所示:

    "pass 什么都不做,while continue 继续下一个循环迭代。在您的示例中,如果您在 if 之后添加另一个语句,差异将变得明显: 执行 pass 后,这条语句会被执行, continue 后不会执行。”

    我在尝试寻找一种方法来确定 Excel 文件是否通过 python 加密时也找到了这个答案,所以谢谢! :D

    来源:Is there a difference between `continue` and `pass` in a for loop in python?

    Python 文档:https://docs.python.org/2/reference/simple_stmts.html#continue

    【讨论】:

      猜你喜欢
      • 2017-08-03
      • 2011-09-27
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多