Python文件路径有双反斜杠



最后,我想循环遍历指定目录('C:Usersdudepdfs_for_parsing')中的每个pdf并打印每个pdf的元数据。问题是,当我尝试遍历目录时我收到错误">FileNotFoundError: [Errno 2]没有这样的文件或目录:"。我理解出现这个错误是因为我的文件路径中由于某种原因出现了双斜杠。

示例代码

import PyPDF2
import os
path_of_the_directory = r'C:Usersdudepdfs_for_parsing'
directory = []
ext = ('.pdf')
def isolate_pdfs():
for files in os.listdir(path_of_the_directory):
if files.endswith(ext):
x = os.path.abspath(files)
directory.append(x)
for pdf in directory:
reader = PyPDF2.PdfReader(pdf)
information = reader.metadata
print(information)

isolate_pdfs()

如果我一次打印一个文件路径,我看到文件有一个'/',就像我期望的那样:

for pdf in directory:
print(pdf)

当我试图打开每个pdf时,'//'似乎得到了添加'PDFFile = open(pdf,'rb')'

你的问题与//无关,它在这里:

os.path.abspath(files)

假设您有C:Users....x.pdf,您列出该目录,因此files将包含x.pdf。然后使用x.pdf的绝对路径,该路径假定位于当前目录中。你应该把它替换成:

x = os.path.join(path_of_the_directory, files)

其他笔记:

  • PDFFilePDF不能大写。首选pdf_filepdf_reader。后者还避免了与for pdf in...
  • 的混淆。
  • 尝试使用调试器而不是打印语句。我就是这样找到你的窃听器的。它可以在您的IDE或python -i命令行中,您可以逐步通过您的代码,测试一些变化,摆弄变量…
  • 为什么ext = ('.pdf')带大括号?它不做任何事情,但导致认为它可能是一个元组(但不是)。
  • 作为练习,第一个for可以写成:directory = [os.path.join(path_of_the_directory, x) for x in os.listdir(path_of_the_directory) if x.endswith(ext)]