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定义了一个新的类别而不是使用默认类别,那就好了,但是…因为它们没有,而且您可能不会从这一行代码中得到任何其他警告,所以这没什么大不了的。在这种情况下,您想得到一个没有警告的空数组吗,或者,您是否希望实际将警告当作异常处理,并在这些情况下执行不同的操作?空列表就足够了,不需要复杂的处理。如果文件包含注释但没有数据,则不起作用。