python - 为临时文件使用自定义名称(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)
解决方案
我确实浏览了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)
推荐阅读
- javascript - JavaScript for 循环仅在第一次单击事件时找到子 div 类
- gradle - OpenAPI Generator 从命令行工作,但不能从 Gradle 插件工作
- amazon-web-services - 如何使用 s3cmd 列出所有空文件夹
- javascript - JavaScript DOM 样式在 Angular 中导入动画模块后停止工作
- javascript - 我试图让“技术”这个词只在页面滚动后出现滚动功能词,但它也在顶部 onload 我不想要这个
- python - 计算两个 3D 对象之间最小距离的简单方法
- mysql - 删除 MySQL WHERE id IN (@VARIABLE) 中的记录 -- (2,3,4)
- rasa-nlu - 如何修复错误用户警告:“evaluate_every_number_of_epochs”的值大于“epochs”的值。不会进行评估
- python - 从数据框python中选择2种类型的行
- python - 如何过滤列表中的元素并生成频率表