首页 > 解决方案 > 为临时文件使用自定义名称(tempfile 模块)

问题描述

我正在尝试生成包含一些基本 Python 样板代码的临时文件。我的大部分代码都在工作,但我似乎不知道如何使用tempfile模块为临时文件设置全名。

我的代码(如下)生成文件名/tmp/210925_104246et5p5tgz.py,例如第一部分 ( 210925_104246) 是我想用作名称的时间戳。那和.py( et5p5tgz) 之间的字符是由函数自动生成的NamedTemporaryFile(),我不知道如何防止这种情况。


import tempfile
import datetime

boiler = b'''
import numpy as np
import matplotlib.pyplot as plt
from astropy.io import ascii


def main():
    """
    """


def func():
    """
    """

    return


if __name__ == '__main__':
    main()
'''


def createFile():
    """
    """
    pref = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
    f = tempfile.NamedTemporaryFile(delete=False, suffix=".py", prefix=pref)
    filepath = f.name
    f.write(boiler)
    f.close()

    return filepath


filepath = createFile()
print(filepath)

标签: pythontemporary-files

解决方案


我确实浏览了Tempfile的官方文档,我认为没有办法给它一个自定义名称(除了你已经使用过的前缀和后缀)。

但是,如果您正在寻找一种方法将样板代码存储在文件中,然后稍后在代码中检索它,您可以考虑使用pickle如下方式:

import tempfile
import datetime
import pickle
import os

boiler = b'''
import numpy as np
import matplotlib.pyplot as plt
from astropy.io import ascii


def main():
    """
    """


def func():
    """
    """

    return


if __name__ == '__main__':
    main()
'''

def createFile(bp_code):

    pref = datetime.datetime.now().strftime("%y%m%d_%H%M%S") + ".py"
#     f = tempfile.NamedTemporaryFile(delete=False, suffix=".py", prefix=pref)
#     filepath = f.name
    filedir = "d:\mycode"
    
    filename = os.path.join(filedir, pref)
    with open(filename, 'wb') as fh:
        pickle.dump(bp_code, fh)
        
    return filename

def getBoilerPlateCode(fpath):
    bp_code =""
    with open(fpath, 'rb') as fh:
        bp_code = pickle.load(fh)
    return bp_code.decode('utf-8')

filepath = createFile(boiler)
print(f"Filepath: {filepath}")

repeated_code = getBoilerPlateCode(filepath)
print(repeated_code)

推荐阅读