我正在编写一个python3程序,该程序生成一个文本文件,该文件使用asciidoc进行后处理,以获得html和pdf中的最终报告。
python程序生成数千个文件,其中包含要包含在最终报告中的图形。使用tempfile.NamedTemporaryFile
生成文件的文件名tempfile使用的字符集定义为:
的问题characters =“abcdefghijklmnopqrstuvwxyz0123456789 _”
然后我以一些名称为“_6456_”的文件结束,asciidoc将“_”解释为格式并插入一些打破报告的html。
我需要找到一种方法来“转义”asciidoc中的文件名或控制临时文件中的字符。
我目前的解决方案是在关闭它之后重命名临时文件,用一些其他字符替换“_”(不在tempfile使用的字符列表中以避免碰撞)但我觉得有一个更好的方法。
我会欣赏任何想法。我对python还不是很精通,我认为在tempfile中重载_RandomNameSequence会起作用,但我不知道怎么做。
问候。
答案 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)])