3

HTMLおよびPDFの最終レポートのために、asciidocで後処理されるテキストファイルを生成するpython3プログラムを書いています。

python プログラムは、最終レポートに含まれるグラフィックを含む何千ものファイルを生成します。ファイルのファイル名は tempfile.NamedTemporaryFile で生成されます

問題は、tempfile で使用される文字セットが次のように定義されていることです。

文字 = "abcdefghijklmnopqrstuvwxyz0123456789_"

次に、「_6456_」のような名前のファイルで終了し、asciidoc は「_」をフォーマットとして解釈し、レポートを壊す html を挿入します。

asciidoc でファイル名を「エスケープ」する方法を見つけるか、一時ファイルの文字を制御する必要があります。

私の現在の解決策は、一時ファイルを閉じた後に名前を変更して、「_」を他の文字に置き換えることです(衝突を避けるために一時ファイルで使用される文字のリストにはありません)が、もっと良い方法があると感じていますやれ。

どんなアイデアでも感謝します。私はまだPythonに精通していません.tempfileで_RandomNameSequenceをオーバーロードすることはうまくいくと思いますが、それを行う方法がわかりません.

よろしく。

4

3 に答える 3

3

tempfile内部の操作に基づくハック方法:

class MyRandomSequence(tempfile._RandomNameSequence):
    characters = "xyz123"

tempfile._name_sequence = MyRandomSequence()
# make your temporary file

例:

>>> tempfile.NamedTemporaryFile()
<open file '<fdopen>', mode 'w+b' at 0x1013b5540>
>>> k=_
>>> k.name
'/var/folders/Su/SuMQtmxiE941sUwe8d91lE+++TU/-Tmp-/tmp33x22z'
于 2012-09-21T00:56:57.893 に答える
0

自分でジェネレーターを作ってみませんか?

例:

import string
from random import choice

def generate():
    size = 9
    return ''.join([choice(string.letters + string.digits) for i in range(size)])

ソース

于 2012-09-21T10:41:01.993 に答える
0

を使用して一時ディレクトリを作成しtempfile.tempdir、ファイル名を手動で生成することもできますfile1, file2, ..., filen。このようにして、「_」文字を簡単に回避でき、作業が終了したら一時ディレクトリを削除できます。

于 2012-09-21T00:46:02.243 に答える