У меня есть процедура, которая os.walk
s каталог и его подкаталоги для фильтрации файлов 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
Я знаю, что мне не хватает чего-то простого, но ни любви, ни денег я не могу понять, что это такое. Свежая пара глаз очень поможет!
G:/Books/Sub Folder\\Title.Pdf
— вполне допустимое имя пути, если\\
следует интерпретировать как строковую нотацию Python для одного\
. Как вы печатаете путь? - person Fred Foo   schedule 05.09.2012indexlist.append(root + name)
вы должны использоватьindexlist.append(os.path.join(root,name))
- person halex   schedule 06.09.2012os.path.sep
сообщит вам правильный разделитель, который следует использовать для ОС, на которой вы работаете... есть много материалов os.path, которые могут помочь в таких вещах... - person Joran Beasley   schedule 06.09.2012