更改tempfile.NamedTemporaryFile的字符集

时间:2012-09-21 00:38:49

标签: python-3.x

我正在编写一个python3程序,该程序生成一个文本文件,该文件使用asciidoc进行后处理,以获得html和pdf中的最终报告。

python程序生成数千个文件,其中包含要包含在最终报告中的图形。使用tempfile.NamedTemporaryFile

生成文件的文件名

tempfile使用的字符集定义为:

的问题

characters =“abcdefghijklmnopqrstuvwxyz0123456789 _”

然后我以一些名称为“_6456_”的文件结束,asciidoc将“_”解释为格式并插入一些打破报告的html。

我需要找到一种方法来“转义”asciidoc中的文件名或控制临时文件中的字符。

我目前的解决方案是在关闭它之后重命名临时文件,用一些其他字符替换“_”(不在tempfile使用的字符列表中以避免碰撞)但我觉得有一个更好的方法。

我会欣赏任何想法。我对python还不是很精通,我认为在tempfile中重载_RandomNameSequence会起作用,但我不知道怎么做。

问候。

3 个答案:

答案 0 :(得分:3)

Hack方式,基于操纵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'

答案 1 :(得分:0)

也许您可以使用tempfile.tempdir创建临时目录并手动生成文件名,例如file1, file2, ..., filen。这样您就可以轻松避免使用“_”字符,并且可以在完成后删除临时目录。

答案 2 :(得分:0)

为什么不自己创建一个生成器?

示例:

import string
from random import choice

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

Source