在pyPDF中组织PDF

时间:2013-09-18 20:57:59

标签: python pdf

我对Python和pyPdf有疑问。

我正在尝试做的是创建PDF(显然),然后以某种方式对其进行排序。因此,每次运行我的脚本时,它都会以某种方式为我排序,无论文件何时创建。

如果我的目标文件夹中有7个文件,我希望它们在我的最终文件中订购7 4 3 2 1 6 5,无论它们最终放在文件夹中。

我在下面的示例,基本上做我想要的,但不按我的意愿订购PDF。它目前按修改日期进行。这有什么意义吗?

我是Python游戏的新手,根本没有使用pyPDF的经验,所以任何帮助都会非常感激!


def merge_pdfs(latest_dir):

startDir = latest_dir
os.chdir(startDir)
outFile = '%s_DepartmentalTaskList.pdf'%(time.strftime("%m%d%y"))

if os.path.exists('%s/%s'%(latest_dir, outFile)):
os.system('rm %s/%s'%(latest_dir, outFile))

fileList = os.listdir(startDir)
output = pyPdf.PdfFileWriter()

for item in fileList:
print 'item = %s'%item
    if os.path.splitext(item)[1].upper() == ".PDF":
        pdfDocument = os.path.join(startDir,item)
        input1 = pyPdf.PdfFileReader(file(pdfDocument, "rb"))
    for page in range(input1.getNumPages()):
        output.addPage(input1.getPage(page))


print 'outFile = %s'%outFile
outputStream = file(outFile, "wb")
output.write(outputStream)
outputStream.close()

return '%s/%s'%(startDir, outFile)

1 个答案:

答案 0 :(得分:0)

os.listdir以任意顺序返回文件名列表,因此您必须在处理它们之前根据需要对其元素进行排序。列表类的排序方法将允许您这样做。假设您的后缀'a','b',...是您想要的顺序,按文件名的日期部分排序,然后后缀将给出您想要的内容:

  

fileList.sort(key = lambda fname:(fname [:6],fname [-1]))

这会对fileList进行排序。 请注意,这是Python 3.x样式,其中sort传递一个参数函数,返回键进行排序(此处为复合键),而不是双参数比较函数。 但是,上面显示的示例也适用于Python 2.4及更高版本,它将关键函数添加为关键字参数。如果您感到好奇,请参阅Python 2.7 list.sort文档以获取更多详细信息,如以及排序HOWTO(也在文档中)。 如果您绝对确定目录中的所有文件都具有相同的日期,那么您可以使用:

  

fileList.sort(key = lambda fname:fname [-1])

如果'a','b',...不是你想要的顺序,那么你需要额外的间接,将这些后缀映射到所需的顺序 - 比如,字典,lookup_table,按所需顺序将后缀映射到整数。在这种情况下,您使用的是lookup_table[fname[-1]],而不仅仅是fname[-1]。但是,基于你所关注的内容,我不能说很多关于如何构造lookup_table(例如,总有7个文件吗?它还不清楚)。