Python хранит имена путей с прямой и обратной косой чертой

У меня есть процедура, которая os.walks каталог и его подкаталоги для фильтрации файлов PDF, отделяя их имена и соответствующие имена путей. Проблема, с которой я сталкиваюсь, заключается в том, что он будет сканировать самый верхний каталог и печатать соответствующее имя файла, например. G:/Books/Title.Pdf, но во второй раз он сканирует подпапку, например G:/Books/Sub Folder/Title.pdf, он напечатает следующее

G:/Books/Sub Folder\\Title.Pdf

(что, очевидно, является недопустимым путем). Он также добавит \\ к любым подпапкам внутри подпапок.

Ниже приведена процедура:

def dicitonary_list():
    indexlist=[]        #holds all files in the given directory including subfolders
    pdf_filenames=[]    #holds list of all pdf filenames in indexlist
    pdf_dir_list = []   #holds path names to indvidual pdf files 

    for root, dirs,files in os.walk('G:/Books/'):
        for name in files:
            indexlist.append(root + name)
            if ".pdf" in name[-5:]:
                pdf_filenames.append(name)

    for files in indexlist:
        if ".pdf" in files[-5:]:
            pdf_dir_list.append(files)

    dictionary=dict(zip(pdf_filenames, pdf_dir_list))       #maps the pdf names to their directory address

Я знаю, что мне не хватает чего-то простого, но ни любви, ни денег я не могу понять, что это такое. Свежая пара глаз очень поможет!


person Robert Lear    schedule 05.09.2012    source источник
comment
G:/Books/Sub Folder\\Title.Pdf — вполне допустимое имя пути, если \\ следует интерпретировать как строковую нотацию Python для одного \ . Как вы печатаете путь?   -  person Fred Foo    schedule 05.09.2012
comment
Вместо indexlist.append(root + name) вы должны использовать indexlist.append(os.path.join(root,name))   -  person halex    schedule 06.09.2012
comment
os.path.sep сообщит вам правильный разделитель, который следует использовать для ОС, на которой вы работаете... есть много материалов os.path, которые могут помочь в таких вещах...   -  person Joran Beasley    schedule 06.09.2012


Ответы (1)


И прямая, и обратная косая черта являются вполне допустимыми разделителями путей в Python для Windows.

>>> import os
>>> os.getcwd()
'j:\\RpmV'
>>> os.path.exists('j:\\Rpmv\\make.py')
True
>>> os.path.exists('j:/rpmv/make.py')
True
>>> os.path.isfile('j:\\Rpmv/make.py')
True
person g.d.d.c    schedule 05.09.2012
comment
Без проблем понял, что не так. Я не объяснил себя так, как должен был, но понимание того, что косая черта вперед или назад не имеет значения, помогло. поэтому преобразовал прямую косую черту в двойную обратную косую черту, чтобы избежать в os.walk, а затем с помощью os.start выполнить путь для загрузки файла, сработало еще раз спасибо - person Robert Lear; 06.09.2012