正在尝试将大型.pdf文件拆分为多个文件。(python,pdftk)

正在尝试将大型.pdf文件拆分为多个文件。(python,pdftk),python,split,bookmarks,pdftk,Python,Split,Bookmarks,Pdftk,我用Python编写了一个脚本,将.pdf文件按章节/书签进行拆分。以下是我的计划的关键: for each chapter: system('pdftk A=file.pdf cat A{start}-{end} output file2.pdf') 工具箱工作得很好,但是反复调用它显然不是一项高效的任务。解析一个200mb.pdf文件需要15-20秒的时间,而在大约30个章节的跨度内进行解析需要很长时间。打开文件所花费的时间比实际写入任何数据所花费的时间都要多 由于工具箱中似乎没有

我用Python编写了一个脚本,将.pdf文件按章节/书签进行拆分。以下是我的计划的关键:

for each chapter:
    system('pdftk A=file.pdf cat A{start}-{end} output file2.pdf')
工具箱工作得很好,但是反复调用它显然不是一项高效的任务。解析一个200mb.pdf文件需要15-20秒的时间,而在大约30个章节的跨度内进行解析需要很长时间。打开文件所花费的时间比实际写入任何数据所花费的时间都要多


由于工具箱中似乎没有一种固有的方式来字符串化多个命令,我是否可以使用Python或CMD来解决这个问题(即保持.pdf打开)?如果你能推荐一个模块的话,我也会看看另一个模块(尽管它也有很多问题)。

要将pdf文件保存在内存中,请将其读入
StringIO
缓冲区,并告诉pdftk从stdin读取。具体地说:使用
subprocess.call
而不是
os.system
,使用
StringIO
缓冲区作为
stdin
参数:

mybuffer = StringIO.StringIO(open('file.pdf').read())
subprocess.call('pdftk ...', stdin=mybuffer)

它仍然需要每次重新解析pdf文件,但至少你不会让你的硬盘转得太快。唯一真正快速的方法是使用一个可以一次性完成的工具(例如,解决pypdf的任何问题)。

如果您有一个
input.pdf
文件,有20000页,并且希望将其拆分为1..20.pdf文件,每个文件有1000页

for (( i=0; i<=20; i++ )); do let n=$i*1000; let m=$[i+1]*1000; pdftk input.pdf cat $n-$m output $i.pdf; done;

for((i=0;iYou可以将其压缩成一个shell文件?Windows和Python 2.7。是的,谢谢。stdin正是我想要的。不过,我无法让StringIO正常工作,所以我使用open(PDF)作为缓冲区。这是可怕的礼节吗?`open(PDF)'是一个开放的文件流,我看不出传递它有什么错。如果它能工作,请享受它!我很惊讶它给了您很大的加速,因为您只获得了I/o库提供的有限缓冲。您得到了正确的输出吗?PS。我包含的代码片段为您的整个文件创建了一个StringIO缓冲区。有什么不正确的吗你开始工作了吗?是的,似乎工作得很好。它不仅在连续的操作中更快,而且在单个操作中也更快,这让我觉得除了在内存中存储文件之外,还有其他东西在帮助加速(pdftk不擅长打开文件?不知道)。这是我在使用StringIO:AttributeError:StringIO实例时遇到的错误。该实例没有属性“fileno”