从一组变量生成可解码的字符串

问题描述

我有一个代码,其中包含许多(各种类型)配置变量。对于每组配置,我都会生成一个文件。我想根据我用来生成该文件的配置来命名该文件。但是,由于我有大约20种配置,所以如果我仅将配置值用作字符串并连接到文件名中,文件名就会变得太大。

是否有一种方法可以从一组变量中生成字符串,以后可以将其解码为原始变量值(以便可以找出用于文件的配置)? 文件名可能乱七八糟(只要可以在Linux中用作文件名)

即我需要这样的东西

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

解决方法

如果有人遇到类似问题,这就是我要做的。在这里,字典中只有intfloatbool配置

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,e = map(int,[r,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)
,

如果可能的配置数量固定为20,则可以使用字母进行编码(即config1 ='A',config2 ='B',....),然后根据最多20个字母表示用于创建文件的配置。

编码可以通过Encoded Char:config封装在字典中,反之亦然。

这是我使用您的示例所要表达的意思:

SELECT P2.PLU,P2.Description
FROM @YourTable P2 
WHERE P2.PLU in (
      SELECT P.PLU 
      FROM @YourTable P
      GROUP BY P.PLU
      HAVING COUNT(DISTINCT(P.DESCRIPTION)) > 1
)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...