Python - 路径名中的数字问题

4 投票
2 回答
4976 浏览
提问于 2025-04-16 14:28

我需要打开一个文件夹里的所有PDF文件,所以我首先用os.path生成一个文件路径的列表:

filenames = [
    normpath(join(directoryname, filename))
    for filename in listdir(directoryname)
    if filename.lower().endswith('.'+extension)            
    ]

这个列表里的一个项目看起来像这样: D:\\Folder\\2010\\file.pdf

然后我想用一个循环来打开每个文件:

for file in filenames:
    PdfFileReader(file(file, 'rb'))

但在处理2010这个文件夹时似乎出现了问题,因为我收到了这个错误:

IOError: [Errno 2] No such file or directory: 'D:\\Folder\\x810\\file.pdf'

我想做的事情大概是这样的:

PdfFileReader(file(r'D:\\Folder\\2010\\file.pdf', 'rb'))

在上面的例子中,如何将路径作为变量传递?或者有没有更好的方法来做到这一点?

我使用的是Windows系统和Python 2.6。

提前谢谢大家!

2 个回答

0

在Windows系统中,Python会自动把正斜杠(/)转换成反斜杠(\)。这是因为Python还可以在其他操作系统上运行,比如Linux和Mac,而这些系统本身就使用正斜杠作为路径分隔符。

15

在像Python这样的C风格字符串中,反斜杠是个特殊的符号,这种情况在C++、C#和Java中也是一样。你可以用两个反斜杠来表示“没错,我就是想用反斜杠”,而不是用字符代码\201,或者使用r''字符串,这种字符串不会对反斜杠进行特殊处理:

'D:\\Folder\\2010\\file.pdf'
r'D:\Folder\2010\file.pdf'

需要注意的是,这个问题在变量中不会出现!一旦你正确创建了一个字符串,它的值就会一直保持不变;它不会被重新解释,也不会因为反斜杠而再次出现问题。每次你把这个值传给一个函数时,open(myvar)应该看到的字符串和你用print(myvar)打印出来的完全一样。

(我觉得在Windows上,你也可以直接使用正斜杠,这样就不需要特别处理了:)

'D:/Folder/2010/file.pdf'

撰写回答