Python - 路径名中的数字问题

4

我需要打开一个特定目录下的所有PDF文档,因此我首先使用os.path生成文件路径列表:

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

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

然后我想在for循环中打开每个文件:

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。 提前感谢!

你可能需要进一步解释一下“使用变量作为路径名”的含义,除非你只是指一个变量将被设置为字符串p = r'D:\…',然后用于打开文件file(p, 'rb') - Brandon Rhodes
2
如果我没记错的话,在Windows机器上,你也可以简单地使用正斜杠作为路径分隔符。 - igor
我已经在我的答案中提到了这一点,但由于它被隐藏在括号中,我会让它更加明显。 - Brandon Rhodes
在评论之前,我应该先阅读你的答案。;-) - igor
我无法运行你的示例for循环,因为它将内置的file()函数替换为你的file变量,这样file(file...)就只是你的字符串文件名值试图调用自身作为函数。 - Brandon Rhodes
@Brandon 哦,那个变量名的选择真是太愚蠢了,改一下就解决问题了!谢谢! - None
2个回答

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'

实际上,os.path 是其中一个问题。我正在使用它将所有文件路径写入列表,因此我有一个看起来像这样的路径列表: D:\Folder\file.pdf然后我想在 for 循环中打开每个文件: for file in filenames: - None
按回车键...无论如何: for file in filenames: PdfFileReader(file(file, 'rb'))这就是我之前在问题中所指的,因为我不能在这里写rfile,而且我从os.path获取路径,所以我不能更改斜杠。 - None

0

Python会自动将Windows路径名中的正斜杠转换为反斜杠(这是因为Python运行在其他操作系统上,包括Linux和Mac,它们本身使用正斜杠)。


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