【问题标题】:Trouble with os.path() in pythonpython中os.path()的问题
【发布时间】:2023-03-12 20:44:01
【问题描述】:

我有一个 MacOS PyObjC 脚本,它获取 PDF 的文件名并将其作为标题元数据添加到 PDF 本身。

我使用 kCGPDFContextTitletitle 的键/变量对,它进入元数据字典。

如果我将title 定义为从sys.argv 获取的整个文件路径,那么该值会正确显示在PDF 的元数据中。

如果我将title 定义为给定的字符串,它会起作用。

如果我将title 定义为os.path.basename(filename),则它不会出现在元数据中。

文件名中的空格不是一个因素。相关代码为:

def setMetadata(filename):
    options = {}    
    title = os.path.basename(filename)  
    titleKey = Quartz.kCGPDFContextTitle

    pdfURL = NSURL.fileURLWithPath_(filename)
    pdfDoc = Quartz.PDFDocument.alloc().initWithURL_(pdfURL)

    options[titleKey] = title
    pdfDoc.writeToFile_withOptions_(filename, options)

if __name__ == "__main__":
    for filename in sys.argv[1:]:
        setMetadata(filename)

如果我print()options 字典,我可以看到工作数据和非工作数据之间没有结构差异。类型是字符串。其他密钥/对也包括在内,并且毫无问题地出现在元数据中。

【问题讨论】:

  • 你如何用参数调用你的脚本?
  • metadata.py filename1 filename2 ....
  • 完整文件名?喜欢'/bin/user/whatever/myomy.pdf'?或者只是python metadata.py one.pdf two.pdf .. 如果是后者,请尝试更改为python metadata.py ./one.pdf ./two.pdf
  • 是的。如前所述,完整路径将出现在元数据中。但是如果我将它拆分为只获取没有路径的文件名,它就行不通了。
  • 不,我使用的是完整路径:通过将文件从 Finder 拖到终端窗口中,或使用 Automator“运行 Shell 脚本”操作中的脚本。我在每个中得到相同的结果。如果我不使用 os.path,我会在 PDF 元数据中获得完整路径。如果我这样做,我什么也得不到。我已经确认拆分路径名实际上在字典中。

标签: python macos core-graphics pyobjc


【解决方案1】:

奇怪的是,这已通过进一步的文本处理得到解决。

在字符串声明的末尾使用capitalize() 方法有效。

title = os.path.basename(filename).capitalize()

或者,我也可以通过在声明title 后删除以os.path.splitext() 结尾的文件来获得相同的结果。

title = os.path.basename(filename)
title = os.path.splitext(title)[0]

不知道原来的字符串出了什么问题,但CoreGraphics的众神现在很满意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多