1

我的 mac os 将在我的火车数据集文件目录下生成一个 .DS_Store,并且 load_files 将加载它并引发异常,例如

UnicodeDecodeError:“utf8”编解码器无法解码位置 1116 中的字节 0xff

我想知道如何过滤 .DS_Store 文件,除了删除它?

4

3 回答 3

3

查看文档,似乎没有任何方法可以直接过滤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实际上是多么简单——特别是如果你不使用像categoriesor这样的额外功能shuffle——不使用它可能会更简单,而是使用os.walkor 只是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)]
于 2013-01-01T07:19:11.713 回答
0

快速浏览一下来源就会发现,您唯一的load_files选择是删除.DS_Store文件:

documents = [join(folder_path, d)
    for d in sorted(listdir(folder_path))]

(如果你想认真对待.DS_Store 污染,这里有一个严重的内核扩展:https ://github.com/binaryage/asepsis )。

于 2013-01-01T07:22:26.377 回答
0

我已修改 sklearn load_files接受附加参数“ignore_files”,该参数将接受要忽略的文件列表。您可以使用 load_files 的此定义而不是 sklearn。它返回与 load_files 相同的结果,因为我只是过滤需要忽略的文件。

用法 :

load_files(dir_path,ignore_files=".DS_Store")

要点上的来源

于 2015-07-28T09:30:49.057 回答