コード例 #1
0
    def addPath(self, directoryPath):
        r'''
        Add a directory path to a local corpus:

        >>> localCorpus = corpus.corpora.LocalCorpus('a new corpus')
        >>> localCorpus.addPath('~/Desktop')

        Paths added in this way will not be persisted from session to session
        unless explicitly saved by a call to ``LocalCorpus.save()``.
        '''
        from music21 import corpus
        if not isinstance(directoryPath, (str, pathlib.Path)):
            raise corpus.CorpusException(
                'an invalid file path has been provided: {0!r}'.format(
                    directoryPath))

        directoryPath = common.cleanpath(directoryPath, returnPathlib=True)
        if (not directoryPath.exists() or not directoryPath.is_dir()):
            raise corpus.CorpusException(
                'an invalid file path has been provided: {0!r}'.format(
                    directoryPath))
        if self.name not in LocalCorpus._temporaryLocalPaths:
            LocalCorpus._temporaryLocalPaths[self.name] = set()

        LocalCorpus._temporaryLocalPaths[self.name].add(directoryPath)
        self._removeNameFromCache(self.name)
コード例 #2
0
    def _findPaths(self, rootDirectoryPath, fileExtensions):
        '''
        Given a root filePath file path, recursively search all contained paths
        for files in `rootFilePath` matching any of the file extensions in
        `fileExtensions`.

        The `fileExtensions` is a list of file file extensions.

        NB: we've tried optimizing with `fnmatch` but it does not save any
        time.
        '''
        from music21 import corpus
        matched = []
        if six.PY2:
            rootDirectoryPath = six.u(rootDirectoryPath)

        for rootDirectory, directoryNames, filenames in os.walk(rootDirectoryPath):
            if '.svn' in directoryNames:
                directoryNames.remove('.svn')
            for filename in filenames:
                try:
                    if filename.startswith('.'):
                        continue
                except UnicodeDecodeError as error:
                    raise corpus.CorpusException(
                        'Incorrect filename in corpus path: {0}: {1!r}'.format(filename, error))
                for extension in fileExtensions:
                    if filename.endswith(extension):
                        matched.append(os.path.join(rootDirectory, filename))
                        break
        return matched