我的 mac os 将在我的火车数据集文件目录下生成一个 .DS_Store,并且 load_files 将加载它并引发异常,例如
UnicodeDecodeError:“utf8”编解码器无法解码位置 1116 中的字节 0xff
我想知道如何过滤 .DS_Store 文件,除了删除它?
我的 mac os 将在我的火车数据集文件目录下生成一个 .DS_Store,并且 load_files 将加载它并引发异常,例如
UnicodeDecodeError:“utf8”编解码器无法解码位置 1116 中的字节 0xff
我想知道如何过滤 .DS_Store 文件,除了删除它?
查看文档,似乎没有任何方法可以直接过滤load_files
(或者,您可以将类别列入白名单,但不能将类别中的文件列入白名单,或在任一级别列入黑名单)。
您可能需要考虑向 scikit-learn 项目提交功能请求。或者,您可能会认为这是一个错误,即加载了隐藏文件(为平台适当定义,但在 OS X 和其他应包含名称以 开头的文件的 POSIX 系统上.
),并就此提交错误报告。
同时,load_content
您可以设置一个标志:
load_content :布尔值,可选(默认=真)
是否加载不同文件的内容。如果为真,则返回的数据结构中存在包含文本信息的“数据”属性。如果没有,文件名属性会给出文件的路径。
通过False
,它只会为您找到文件名,然后您可以根据需要过滤(例如,filenames = (filename for filename in ret.filenames if not filename.startswith('.'))
),然后手动加载。
这似乎是给定工具可用的最佳解决方案。
另一方面,考虑到load_files
实际上是多么简单——特别是如果你不使用像categories
or这样的额外功能shuffle
——不使用它可能会更简单,而是使用os.walk
or 只是os.listdir
. 在这种情况下,鉴于文件的深度正好是 2 层,而不是任意深度,后者可能更简单:
def getfilenames(category):
return [filename for filename in os.listdir(category)
if not filename.endswith('.')]
categoryfiles = [getcategory(os.path.join(rootpath, category)
for category in os.listdir(rootpath)]
快速浏览一下来源就会发现,您唯一的load_files
选择是删除.DS_Store
文件:
documents = [join(folder_path, d)
for d in sorted(listdir(folder_path))]
(如果你想认真对待.DS_Store
污染,这里有一个严重的内核扩展:https ://github.com/binaryage/asepsis )。