Python 防止或解除';空文件';loadtxt中的警告
我的代码通过以下命令遍历多个文件并将其读入列表:Python 防止或解除';空文件';loadtxt中的警告,python,numpy,Python,Numpy,我的代码通过以下命令遍历多个文件并将其读入列表: data = np.loadtxt(myfile, unpack=True) 其中一些文件是空的(我无法控制),当这种情况发生时,我会在屏幕上打印以下警告: /usr/local/lib/python2.7/dist-packages/numpy/lib/npyio.py:795: UserWarning: loadtxt: Empty input file: "/path_to_file/file.dat" warnings.warn('
data = np.loadtxt(myfile, unpack=True)
其中一些文件是空的(我无法控制),当这种情况发生时,我会在屏幕上打印以下警告:
/usr/local/lib/python2.7/dist-packages/numpy/lib/npyio.py:795: UserWarning: loadtxt: Empty input file: "/path_to_file/file.dat"
warnings.warn('loadtxt: Empty input file: "%s"' % fname)
如何防止显示此警告?一个明显的可能性是预先检查文件:
if os.fstat(myfile.fileno()).st_size:
data = np.loadtxt(myfile, unpack=True)
else:
# whatever you want to do for empty files
您必须使用
catch\u warnings
来包装该行,然后调用simplefilter
方法来抑制这些警告。例如:
import warnings
with warnings.catch_warnings():
warnings.simplefilter("ignore")
data = np.loadtxt(myfile, unpack=True)
应该这样做。这将隐藏该行中的所有警告,而不仅仅是您想要的警告……但这可能没问题,而且由于numpy似乎没有定义警告类别,因此有很好的替代方法。因此,这似乎是最好的答案。通过使用更高级的
filterwarnings()
方法,您可以进一步完善它,在需要时只忽略用户警告。例如,将warnings.simplefilter(“ignore”)
行替换为warnings.filterwarnings(“ignore”,category=UserWarning,append=1)
这很奇怪,但对我来说不起作用。我仍然看到警告。@MSalmo:不幸的是,大多数不是来自语言本身特定部分的警告都是UserWarning
,所以这只能起到很大的作用。如果numpy定义了一个新的类别而不是使用默认类别,那就好了,但是…因为它们没有,而且您可能不会从这一行代码中得到任何其他警告,所以这没什么大不了的。在这种情况下,您想得到一个没有警告的空数组吗,或者,您是否希望实际将警告当作异常处理,并在这些情况下执行不同的操作?空列表就足够了,不需要复杂的处理。如果文件包含注释但没有数据,则不起作用。