我正在尝试进行Python拆分,但我的逻辑似乎存在问题。
我有一些数据,用分号分隔。我的数据的一些示例如下:
我只想从每一行中检索一个值。例如在第1行中,我只想要最后一个值20,而我想从第二行得到40。
我尝试使用以下代码:
fields = fields.split(";")[-1]
它适用于第一行,我得到了20.但是我无法从第二行获取数据,因为它在拆分中只有一个元素。
然后我尝试使用if-else条件,如下所示,但代码无法运行。
if (len(fields.split(";")) > 0):
fields = fields.split(";")[-1]
else:
pass
有谁知道如何处理这个问题?我实现的是,如果该行中只有1个值,我会读它。如果有多个值,我将其拆分并取最后一个值。
答案 0 :(得分:2)
使用strip
来规范化输入,问题是对于一个数字情况有额外的;
,所以我们应该首先删除它。
In [1]: def lnum(s):
...: return s.strip(';').split(';')[-1]
...:
In [2]: lnum('89;50;20')
Out[2]: '20'
In [3]: lnum('89;')
Out[3]: '89'
In [5]: lnum('10;')
Out[5]: '10'
答案 1 :(得分:2)
因此,如果您看到使用分号('40;'
)分割字符串 - ;
的时间,则会得到两个字符串的列表 - ['40', '']
。因此,fields.split(";")[-1]
会为输入'40;'
返回一个空字符串。
因此,要么在拆分之前剥离最后一个分号;
,如下所示。
print('40;'.rstrip(';').split(';')[-1])
或者,您可以这样做:
fields = '40;'.split(';')
if fields[-1]:
print(fields[-1])
else:
print(fields[-2])
我更喜欢第一种方法,而不是if/else
方法。另外,请查看.strip(), .lstrip(), .rstrip()函数。
答案 2 :(得分:0)
另一种方法是使用re模块。
from re import findall
s1 = '80;778;20'
s2 = '40'
res1 = findall( '\d+', s1)
res2 = findall( '\d+', s2)
print res1[-1]
print res2[-1]