python中的os.path()麻烦

时间:2019-01-25 13:08:31

标签: python macos core-graphics pyobjc

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

我使用{/ {1}}和kCGPDFContextTitle的键/变量对,它们进入元数据字典。

如果我将title定义为整个文件路径(取自title),则该值正确显示在PDF的元数据中。

如果我将sys.argv定义为给定的字符串,那么它将起作用。

如果我将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()字典,我看不到工作数据和非工作数据之间的结构差异。类型是字符串。其他密钥/对也包括在内,并且不会出现在元数据中。

1 个答案:

答案 0 :(得分:0)

很奇怪,此问题已通过进一步的文本处理得以解决。

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

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

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

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

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