栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python xlrd:禁止显示警告消息

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python xlrd:禁止显示警告消息

查看xlrd文档的相关部分。

open_workbook
函数的第二个arg
logfile
应该是一个打开的文件对象或类似行为。它所需要支持的只是一种
write
方法。默认为
sys.stdout

因此,应执行以下操作(未测试):

class MyFilter(object):    def __init__(self, mylogfile=sys.stdout):        self.f = mylogfile    def write(self, data):        if "WARNING *** OLE2 inconsistency" not in data: self.f.write(data)#start uplog = open("the_log_file.txt", "w")log_filter = MyFilter(log)book = xlrd.open_workbook("foo.xls", logfile=log_filter)# shut downlog.close()# or use a "with" statement

更新 以回复@DaniloBargen的回答:

不是

xlrd
单独编写换行符,而是Python
print
语句/函数。该脚本:

class FakeFile(object):    def write(self, data):        print repr(data)ff = FakeFile()for x in "foo bar baz".split():    print >> ff, x

为所有Python 2.2至2.7(包括以下两个)生成此输出:

'foo''n''bar''n''baz''n'

适当现代化的脚本(作为功能而不是语句打印)对于2.6、2.7、3.1、3.2和3.3产生相同的输出。您可以使用更复杂的过滤器类来解决此问题。以下示例另外允许检查短语序列:

import sys, glob, xlrdclass MyFilter(object):    def __init__(self, mylogfile=sys.stdout, skip_list=()):        self.f = mylogfile        self.state = 0        self.skip_list = skip_list    def write(self, data):        if self.state == 0: found = any(x in data for x in self.skip_list) if not found:     self.f.write(data)     return if data[-1] != 'n':     self.state = 1        else: if data != 'n':     self.f.write(data) self.state = 0logf = open("the_log_file.txt", "w")skip_these = (    "WARNING *** OLE2 inconsistency",    )try: log_filter = MyFilter(logf, skip_these)    for fname in glob.glob(sys.argv[1]):        logf.write("=== %s ===n" % fname)        book = xlrd.open_workbook(fname, logfile=log_filter)finally:    logf.close()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/611674.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号