3

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

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

tempfile使用的字符集定义为:

字符=“abcdefghijklmnopqrstuvwxyz0123456789_”

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

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

我当前的解决方案是在关闭临时文件后重命名临时文件,以将“_”替换为其他字符(不在 tempfile 用于避免冲突的字符列表中),但我觉得有更好的方法做。

我会欣赏任何想法。我对 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

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

于 2012-09-21T00:46:02.243 回答
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 回答