Python:如何处理作为变量值的空格,避免带引号?
解决配置文件中空格分隔符带引号的问题
看起来你遇到的问题是配置文件里的空格标记被当成了带引号的字符串字面量,导致生成的参数串里出现了' '而不是真正的空格。这是因为ConfigParser不会自动解析你写的' '为空格字符,它会把整个' '作为字符串内容读取进来。
这里有两种可行的解决思路:
方案1:修改代码,手动去除引号
直接在获取new_delimiter后,把字符串里的单引号去掉,转换成真正的空格。修改后的代码如下:
# 假设从配置文件读取到的变量值如下 modify_param_name = "bitrate/bps" modify_delimiter = ":/' '" value = "8000" orig_param = modify_param_name.split('/')[0] new_param = modify_param_name.split('/')[1] orig_delimiter = modify_delimiter.split('/')[0] # 去除单引号,得到真正的空格 new_delimiter = modify_delimiter.split('/')[1].strip("'") new_param_string = new_param + new_delimiter + value print(new_param_string) # 输出: -bps 8000
这里用strip("'")可以去掉字符串前后的单引号,如果你的配置里引号在中间(比如' '),用replace("'", "")也能达到同样效果。
方案2:优化配置文件写法(更推荐)
为了避免引号带来的歧义,你可以在配置文件里用更清晰的标记来表示特殊分隔符,比如用space代表空格,dash代表短横线。修改后的配置文件:
[params] modify_param_name = bitrate/bps modify_delimiter = :/space value = 8000
然后在代码里做对应的转换:
modify_param_name = "bitrate/bps" modify_delimiter = ":/space" value = "8000" orig_param = modify_param_name.split('/')[0] new_param = modify_param_name.split('/')[1] orig_delimiter, delimiter_mark = modify_delimiter.split('/') # 根据标记转换为实际分隔符 if delimiter_mark == "space": new_delimiter = " " elif delimiter_mark == "dash": new_delimiter = "-" else: # 默认使用标记本身作为分隔符 new_delimiter = delimiter_mark new_param_string = new_param + new_delimiter + value print(new_param_string) # 输出: -bps 8000
这种方式可读性更强,后续要添加其他分隔符(比如下划线、逗号)也更容易扩展。
内容的提问来源于stack exchange,提问作者Dibyajyoti Mohapatra
相关产品推荐
相关产品推荐

