Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从一组变量生成可解码字符串_Python_String_Hash_Decode_Encode - Fatal编程技术网

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

Python 从一组变量生成可解码字符串,python,string,hash,decode,encode,Python,String,Hash,Decode,Encode,我有一个代码,其中有许多配置变量(各种类型)。对于每一组配置,我将生成一个文件。我想根据用于生成文件的配置来命名此文件。但是,由于我有大约20个配置,如果我只是将配置值用作字符串并连接到文件名中,文件名就会变得太大 有没有一种方法可以从一组变量生成一个字符串,稍后我可以将其解码为原始变量值(这样我就可以找到我用于该文件的配置)文件名可以是乱七八糟的长文件(只要它可以在linux中用作文件名) i、 我需要这样的东西 conf1 = 10 conf2 = (20,2) conf3 = "

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

有没有一种方法可以从一组变量生成一个字符串,稍后我可以将其解码为原始变量值(这样我就可以找到我用于该文件的配置)文件名可以是乱七八糟的长文件(只要它可以在linux中用作文件名)

i、 我需要这样的东西

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}
”生成文件名?如您指定的示例所示: