Python如何在括号内部分割字符?

3

我正在解析一个大型文本文件,其中键值对由“=”分隔。 我需要将这些键值对拆分成字典。我本来想按“=”拆分。但是我注意到一些值包含等号字符。当值包含等号字符时,它似乎总是用括号括起来。

问题:当等号不在两个括号之间时,如何按等号拆分?

示例数据:

PowSup=PS1(type=Emerson,fw=v.03.05.00)

期望的输出结果:

{'PowSup': 'PS1(type=Emerson,fw=v.03.05.00)'}

更新:数据似乎没有任何嵌套的括号。(希望这在未来保持不变)

更新2:键值似乎也从来没有等号。

更新3:完整要求更加复杂,目前我陷入困境,因此我在这里发布了一个新问题:Python解析混合格式文本文件的输出为键值对字典


键里面会有=吗?还是只有值里面会有? - Tony Tuttle
1
总是有括号吗?它们也可以出现在键字符串中吗?更大的输入数据样本可能会有所帮助。 - Thyrst'
不同键值对之间的分隔符是什么?是换行符吗?必须有一个分隔符,不是吗?如何确定一个值何时结束并且下一个键开始? - squgeim
4个回答

3
您可以尝试使用partition('=')方法从第一个实例开始拆分。
'PowSup=PS1(type=Emerson,fw=v.03.05.00)'.partition('=')[0:3:2]

这将返回 ('PowSup', '=', 'PS1(type=Emerson,fw=v.03.05.00)') - RomanPerekhrest
现在应该没问题了,我猜。 - edyvedy13

1
mydict=dict()
for line in file:
    k,v=line.split('=',1)
    mydict[k]=v

只有每行一个表达式时才有效。 - Thyrst'

1
简单的解决方案使用 str.index() 函数:

s = "PowSup=PS1(type=Emerson,fw=v.03.05.00)"
pos = s.index('=')   # detecting the first position of `=` character
print {s[:pos]:s[pos+1:]}

输出:

{'PowSup': 'PS1(type=Emerson,fw=v.03.05.00)'}

0

您可以将split()操作限制为单个拆分(第一个=):

>>> x = "PowSup=PS1(type=Emerson,fw=v.03.05.00)"
>>> x.split('=', 1)
['PowSup', 'PS1(type=Emerson,fw=v.03.05.00)']

然后,您可以使用这些值来填充您的字典:

>>> x = "PowSup=PS1(type=Emerson,fw=v.03.05.00)"
>>> key, value = x.split('=', 1)
>>> out = {}
>>> out[key] = value
>>> out
{'PowSup': 'PS1(type=Emerson,fw=v.03.05.00)'}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接