【发布时间】:2019-08-18 04:21:11
【问题描述】:
我没有找到任何使用 f-strings 生成 Python 代码的相关问题或 Python 代码示例。有没有我应该知道的潜在问题? f-strings 真的很方便,而且似乎对我的需求相当有效。
我正在生成一些可在命令行中使用的 python 脚本,用于自动处理带有遥感图像的文件夹。我打算手动手动编写一些文件,但意识到通过外部化有关表达式的元数据来自动化该过程相对容易。
程序逻辑:
- 提取表达式,其中包含可对图像执行的不同类型计算的信息(任何类型的遥感指数)
- 遍历表达式
- 使用表达式名称(和其他标准)创建文件
- 将表达式信息插入 f 字符串
- 写 f-string 来创建文件
一旦确定要使用的方法,我也会自动生成一些测试。是否存在限制 f 字符串无法有效处理代码的限制?
有些人讨论过使用 Python 模板,例如 Jinja2。但是,如果 f 字符串足够,我不希望集成另一个外部依赖项。
from expressions_meta import expressions
for key in expressions.keys():
file_name = '_'.join([key, 'dir', 'cl.py'])
with open(file_name, 'w') as f:
f.write(f"""
import sys
import getopt
from gdal_dir_calc import GDALDirCalc
expression = {expressions[key]}
band_meta = {{}}
[...]
gdal_dir_obj.main()
""")
我可能只是过于谨慎,但我认为该主题也可以涉及其他应用程序。
关于使用 f-strings 生成 Python 代码或其他工具的任何其他提示?
【问题讨论】:
-
为什么您甚至需要许多具有(可能)几乎完全相同的源代码的脚本,而不是接受来自 CLI 参数或 conf 文件的输入的单个脚本?
-
与问题无关,但您确实意识到
file_name实际上会在每次expressions迭代中被覆盖,对吧?你最终会得到最后一个值。 -
@DeepSpace:我们的目标是有专门的指数计算器,可以让没有技术背景的人轻松使用。就像计算 NDVI 或 NDSI 一样,只需传递计算所需的简化参数。
-
@MatiasCicero:是的,程序会生成与表达式一样多的脚本。
-
@DeepSpace:为了更清楚地回答你的问题,脚本基于gdal.org/gdal_calc.html。 gdal_calc 已经提供了一种在通用命令行实用程序中处理单个图像的方法。我的项目的兴趣是处理图像目录并具有更抽象的命令行界面(例如,比 (A-B)/(A+B) 具有更明确的参数)。
标签: python python-3.x code-generation