我的mac os将在我的列车数据集文件目录下生成.DS_Store,而load_files将加载它并引发异常,如
UnicodeDecodeError:'utf8'编解码器无法解码1116位的字节0xff
我想知道除了删除它之外如何过滤.DS_Store文件?
答案 0 :(得分:3)
查看documentation,似乎无法直接在load_files
中过滤(或者,您可以将类别列入白名单,但不能将类别中的文件列入白名单,或任何级别的黑名单。)
您可能需要考虑向scikit-learn项目提交功能请求。或者,您可能会认为这是一个错误,隐藏文件(适用于平台 - 但在OS X和其他POSIX系统上应该包含名称以.
开头的文件),并提交错误报告这一点。
同时,您可以设置load_content
标志:
load_content:boolean,optional(default = True)
是否加载不同文件的内容。如果为true,则返回的数据结构中包含包含文本信息的“data”属性。如果没有,则filenames属性给出文件的路径。
通过False
,它会找到您的文件名,然后您可以根据需要进行过滤(例如filenames = (filename for filename in ret.filenames if not filename.startswith('.'))
),然后手动加载。
这似乎是给定工具可用的最佳解决方案。
另一方面,考虑到load_files
实际上有多简单 - 特别是如果您不使用categories
或shuffle
等额外功能 - 可能更简单,不使用它,而是使用os.walk
或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)]
答案 1 :(得分:0)
quick glance at the source load_files
显示您唯一的选择是删除.DS_Store
个文件:
documents = [join(folder_path, d)
for d in sorted(listdir(folder_path))]
(如果你想认真对待.DS_Store
污染,这里有一个严肃的内核扩展:https://github.com/binaryage/asepsis)。
答案 2 :(得分:0)
我修改了sklearn load_files以接受其他参数' ignore_files'这将接受要忽略的文件列表。您可以使用load_files的这个定义而不是sklearn。它返回与load_files相同的结果,因为我只是过滤需要忽略的文件。
用法:
load_files(dir_path,ignore_files=".DS_Store")
上的来源