Python xlrd:禁止显示警告消息

xlrd用来处理Excel文件。我正在包含许多文件的文件夹上运行脚本,并且正在打印与文件有关的消息。但是,对于我运行的每个文件,我也会得到以下xlrd生成的错误消息:

WARNING *** OLE2 inconsistency: SSCS size is 0 but SSAT size is non-zero

有没有一种方法可以禁止显示此错误消息,因此CLI只会打印我想要的消息?

回答:

查看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 xlrd:禁止显示警告消息 的全部内容, 来源链接: utcz.com/qa/428080.html

回到顶部