Python 从一组变量生成可解码字符串
我有一个代码,其中有许多配置变量(各种类型)。对于每一组配置,我将生成一个文件。我想根据用于生成文件的配置来命名此文件。但是,由于我有大约20个配置,如果我只是将配置值用作字符串并连接到文件名中,文件名就会变得太大 有没有一种方法可以从一组变量生成一个字符串,稍后我可以将其解码为原始变量值(这样我就可以找到我用于该文件的配置)文件名可以是乱七八糟的长文件(只要它可以在linux中用作文件名) i、 我需要这样的东西Python 从一组变量生成可解码字符串,python,string,hash,decode,encode,Python,String,Hash,Decode,Encode,我有一个代码,其中有许多配置变量(各种类型)。对于每一组配置,我将生成一个文件。我想根据用于生成文件的配置来命名此文件。但是,由于我有大约20个配置,如果我只是将配置值用作字符串并连接到文件名中,文件名就会变得太大 有没有一种方法可以从一组变量生成一个字符串,稍后我可以将其解码为原始变量值(这样我就可以找到我用于该文件的配置)文件名可以是乱七八糟的长文件(只要它可以在linux中用作文件名) i、 我需要这样的东西 conf1 = 10 conf2 = (20,2) conf3 = "
conf1 = 10
conf2 = (20,2)
conf3 = "some string"
conf4 = {'c1': 10, 'c2': None}
filename = get_filename(conf1, conf2, conf3, conf4) # Encode function
conf1_, conf2_, conf3_, conf4_ = str2conf(filename) # Decode function
如果可能的配置数固定为20,则可以使用字母表中的一个字母(即config1='a',config2='B',..)对每个配置进行编码,然后根据最多20个表示用于创建文件的配置的字母命名文件 编码可以通过Encoded Char:config封装在字典中,反之亦然 以下是我使用您的示例的意思:
conf1 = 10
conf2 = (20, 2)
conf3 = "some string"
conf4 = [4,5,6]
nam_dict = {conf1:'A', conf2:'B', conf2:"C", conf4:'D'}
filename=get_filename(conf1, conf2, conf3, conf4)
def get_filename(*cnfigs):
fs = 'f'
for k in cnfigs:
fs += nam_dict[k]
return fs
如果有人遇到类似的问题,我会这样做。这里我只有字典中给出的
int
、float
和bool
配置
def encode_args(*, r:float, l:float, s:float, c:int, f:int, n:int, L:int, H:int, p:float, C:int, e:bool) -> str:
return f"r{int(r/1000)}l{int(l*1000)}s{int(s*1000)}c{c}f{f}n{n}" \
f"L{L}H{H}p{int(p*100)}C{C}e{1 if e else 0}"
import re
def decode_str(string) -> dict:
r, l, s, c, f, n, L, H, p, C, e = \
re.search(r'r(\d+)l(\d+)s(\d+)c(\d+)f(\d+)n(\d+)L(\d+)H(\d+)p(\d+)C(\d+)e(\d)', string).groups()
r, l, s, c, f, n, L, H, p, C, e = map(int, [r, l, s, c, f, n, L, H, p, C, e])
r *= 1000
l /= 1000
s /= 1000
p /= 100
e = e == 1
return dict(r=r, l=l, s=s, c=c, f=f, n=n, L=L, H0=H, p=p, C=C, e=e)
我不完全明白你的答案。是的,配置的数量是固定的,但这些配置的值可能在很大范围内变化。您建议如何从“a”-
10.123
,“B”-{'c1':10,'c2':None}
”生成文件名?如您指定的示例所示: