0

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)
4

1 に答える 1

0

os.listdir は任意の順序でファイル名のリストを返すため、それらを処理する前に、必要に応じてその要素を順序付けする必要があります。list クラスの sort メソッドを使用すると、これを行うことができます。サフィックス「a」、「b」、...が必要な順序であると仮定すると、ファイル名の日付部分でソートすると、サフィックスが必要なものになります。

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

これにより、fileList が所定の位置に並べ替えられます。これは Python 3.x スタイルであることに注意してください。 sort には、2 つの引数の比較関数ではなく、ソート対象のキー (ここでは複合キー) を返す 1 つの引数の関数が渡されます。ただし、上記の例は、キー関数をキーワード引数として追加した Python 2.4 以降でも機能します。興味がある場合は、Python 2.7 の list.sort ドキュメントと、Sorting HOWTO (ドキュメント内) を参照してください。ディレクトリ内のすべてのファイルが同じ日付になることが絶対に確実な場合は、次の方法で問題を解決できます。

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

「a」、「b」、... が必要な順序でない場合は、追加の間接化が必要になり、それらのサフィックスを目的の順序にマッピングします。たとえば、辞書lookup_table、、サフィックスを int にマッピングする順序欲しいです。その場合、lookup_table[fname[-1]]単に の代わりに使用しますfname[-1]lookup_tableただし、あなたが関連していることに基づいて、を構築する方法についてはあまり言えません(たとえば、常に7つのファイルがありますか??不明です)。

于 2013-09-18T23:23:45.033 に答える