如何标记所有子文件夹中的所有文件

时间:2019-04-14 10:25:31

标签: python nlp dataset tokenize

我有一个包含50个子文件夹的数据集,每个子​​文件夹都有20-30个没有扩展名的文件。我想要做的是标记每个子文件夹的文件中的文本,并将其写入带有子文件夹名称的文件中。例如; 假设subfolder1有25个文件,我想将这25个文件一起标记化,然后将其写入名为“ subfolder1”的文件中。我想对主文件夹中的所有子文件夹都这样做。

我已经尝试了部分code,但由于无法读取文件夹,因此出现PermissionError。

    mainfolder="path\\to\\mainfolder"

    def ls(path):
        return [os.path.join(path, item) for item in os.listdir(path)]


    def load_file_sents(path):
        return [sent.lower()
                for sent in tokenize.sent_tokenize(open(path).read())]


    def load_collection_sents(path):
        sents = []
        for f in ls(path):
            sents.extend(load_file_sents(f))
        return sents


    def get_sentences(path):
        """ loads sentences from the given path (collection or file) """
        sents = []
        try:
            # treat as a single file
            open(path).read()
            sents = load_file_sents(path)
        except IOError:
            # it's a directory!
            sents = load_collection_sents(path)
        return sents


    def get_toks(path):
        return [tokenize.word_tokenize(sent) for sent in get_sentences(path)]

    get_toks(mainfolder)

这是它给出的错误:

PermissionError                           Traceback (most recent call last)
<ipython-input-52-a6f316499b2c> in get_sentences(path)
     37         # treat as a single file
---> 38         open(path).read()
     39         sents = load_file_sents(path)

PermissionError: [Errno 13] Permission denied:

我尝试将前两个功能合并为一个,并确保它将读取文件,但是这次它只是返回了第一个子文件夹的第一个文件的标记。如果您知道如何解决此问题或更好的解决方法,将不胜感激!谢谢。

1 个答案:

答案 0 :(得分:0)

尝试从 current sub-folders 中获取所有文件的内容strong>使用以下命令

find . -type f -exec cat {} +

使用Subprocess.check_output将输出重定向到变量,然后对该变量执行标记化。