您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python xlrd:禁止显示警告消息

Python xlrd:禁止显示警告消息

查看xlrd文档的相关部分。open_workbook函数的第二个arglogfile应该是一个打开的文件对象或类似行为。它所需要支持的只是一种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 up
log = open("the_log_file.txt", "w")
log_filter = MyFilter(log)
book = xlrd.open_workbook("foo.xls", logfile=log_filter)

# shut down
log.close()
# or use a "with" statement

回复@DaniloBargen的回答:

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

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, xlrd

class 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 = 0

logf = 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()
python 2022/1/1 18:26:42 有191人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶