Python中使用正斜杠和反斜杠存储路径名的区别

4

我有一个过程,os.walk扫描目录及其子目录以过滤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

我知道我忽略了一些简单的东西,但是不管怎样我都看不到它。一个新的视角会非常有帮助!

这段内容与IT技术无关。


3
如果将 \\ 解释为 Python 字符串中的单个 \,则 G:/Books/Sub Folder\\Title.Pdf 是一个完全有效的路径名。您是如何打印这个路径的? - Fred Foo
4
应该使用 indexlist.append(os.path.join(root,name)),而不是 indexlist.append(root + name) - halex
1
os.path.sep 会告诉你在你所使用的操作系统中正确的分隔符... 还有很多 os.path 相关的东西可以帮助处理这种情况... - Joran Beasley
1个回答

12

在 Windows 的 Python 中,正斜杠和反斜杠都是有效的路径分隔符。

>>> 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

没有问题,我已经找出了问题所在。我没有解释得很清楚,但是理解正斜杠或反斜杠无关紧要有所帮助。因此,将正斜杠转换为双反斜杠以在os.walk中进行转义,然后使用os.start执行路径名以加载文件即可。再次感谢。 - Robert Lear

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接