如何解决从一组变量生成可解码的字符串
我有一个代码,其中包含许多(各种类型)配置变量。对于每组配置,我都会生成一个文件。我想根据我用来生成该文件的配置来命名该文件。但是,由于我有大约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
解决方法
如果有人遇到类似问题,这就是我要做的。在这里,字典中只有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,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
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。