请记住我对python很新。
我一直在尝试编写一个python脚本,除其他外,使用OSX中已经存在的join.py Python脚本(请参阅https://apple.stackexchange.com/a/99218)来合并特定文件夹中的pdf文件。
此脚本的工作方式是提供以下参数:
在shell中join.py -o OutputDir/Outputfilename InputDir/*.pdf
。
这将获取输入文件名的所有pdf并合并它们。我用shell脚本成功完成了这个,但是尝试用python运行它我没有设法让它抓住所有的pdf,用我试过的任何方式。它总是拒绝处理文件列表,只想要一个字符串。
我的最新剧本:
import sys
sys.path.insert(0, '/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/')
pdfInputDir = os.path.join (sortsdir, expTitle, "PDFs")
print(pdfInputDir)
pdfstomerge = []
for root, dirs, files in os.walk(pdfInputDir):
pdfstomerge += glob.glob(os.path.join(root, '*.pdf'))
print(pdfstomerge) #i verify the pdfs are the ones i want
from subprocess import call
call(["/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py", "-o", os.path.join(pdfInputDir, "output.pdf"), ''.join(map(str, pdfstomerge))])
###
###
每次运行它都会得到一个正确生成的output.pdf,它是空的。为了验证我正在做的是什么工作,我已经将* .pdf与目录中的一个pdf文件名切换,并且它已经生成了一个带有该文件的output.pdf,这意味着我在正确的轨道上,我只是可以找出一种方法来为它提供所有必要的pdf而不是一个。
我不知道自己出错了什么,特别是因为上面的“命令”在终端中有效。我尝试了不同的方法,包括os.path.join(pdfInputDir, "*.pdf")
,re'match和fnmatch,但没有一个工作 - 我通常会在这些方面得到一个错误:
TypeError: Can't convert 'list' object to str implicitly
(可能是我写错了)。
另外,我很确定我可以将它作为python模块运行,而不是用子进程调用它,但后来我找不到一种方法来“推”所有必需的参数,所以我坚持使用subprocess.call方式。
关于如何为我的脚本正确提供这些参数的任何想法都将不胜感激。
答案 0 :(得分:1)
你可以尝试加入(str(i)for i in pdfstomerge)而不是join(map(str,pdfstomerge))。
这应该可以解决您的疑问:-)(希望如此)祝您有愉快的一天!
SELECT DISTINCT
p_Resources.Empl_ID as EmployeeId
,p_Resources.cRole
,p_Empl.ID as Id
,p_Empl.Title
,p_Empl.First_Name as FirstName
,p_Empl.MI as MiddleInitial
,p_Empl.Last_Name as LastName
,p_Empl.Phone
,p_Empl.PWD as Password
,p_Empl.email as Email
,p_Empl.LoginName
,p_Empl.Admin
FROM p_Empl
LEFT OUTER JOIN
p_Resources on p_Resources.Empl_ID = p_Empl.ID
WHERE p_Resources.cRole='Project Manager'
另外我不确定你是否必须在字符串中传递值:
try:
liststr = ','join(str(i) for i in pdfstomerge)
print(liststr)
except TypeError:
print(pdfstomerge) # to check what you have in the list of pdfs