объединить первый словарь со вторыми значениями словаря [закрыто]

После изучения источника ошибки что-то происходит в подпрограмме listdir C-кода, которая возвращает имена файлов, отличных от unicode, когда они не являются стандартными ascii. Единственное исправление заключается в том, чтобы сделать принудительное декодирование списка каталогов в os.walk, что требует замены os.walk. Эта функция замены работает:

def asciisafewalk(top, topdown=True, onerror=None, followlinks=False):
    """
    duplicate of os.walk, except we do a forced decode after listdir
    """
    islink, join, isdir = os.path.islink, os.path.join, os.path.isdir

    try:
        # Note that listdir and error are globals in this module due
        # to earlier import-*.
        names = os.listdir(top)
        # force non-ascii text out
        names = [name.decode('utf8','ignore') for name in names]
    except os.error, err:
        if onerror is not None:
            onerror(err)
        return

    dirs, nondirs = [], []
    for name in names:
        if isdir(join(top, name)):
            dirs.append(name)
        else:
            nondirs.append(name)

    if topdown:
        yield top, dirs, nondirs
    for name in dirs:
        new_path = join(top, name)
        if followlinks or not islink(new_path):
            for x in asciisafewalk(new_path, topdown, onerror, followlinks):
                yield x
    if not topdown:
        yield top, dirs, nondirs

Добавляя строку: names = [name.decode ('utf8', 'ignore') для имени в именах], все имена соответствуют ascii & amp; unicode, и все работает правильно.

Однако остается большой вопрос - как это можно решить, не прибегая к этому взлому?

-10
задан Damián Rafael Lattenero 23 July 2019 в 21:38
поделиться