我一直试图删除不必要的字符串部分而且我遇到了困难。我确信这很简单,但我可能缺乏搜索有效解决方案的术语。
我拥有所需的所有信息,现在正在尝试创建一个干净的输出。我正在使用此代码...
for each in soup.findAll('div', attrs={'class': 'className'}):
print(each.text.split('\n'))
输出,数字和带有可变空格的文本的混合,类似于......
['', '', '', ' 1 ', ' Text Example', ' (4)']
我需要制作的是像......这样的列表。
['1', 'Text Example', '(4)']
甚至可能从数字4中删除括号“()”。
感谢。
答案 0 :(得分:2)
clean = []
for each in soup.findAll('div', attrs={'class': 'className'}):
clean.append([s.strip() for s in each.text.strip() if s.strip()])
print(clean)
应该这样做,完整的代码,我把它放在哪里......
更新
由于存在关于效率低下的评论,出于好奇,我在py3上对双条带与嵌套列表进行了定时。当人们说它最适合描述时,似乎有些东西落后......
%timeit [s.strip() for s in l if s.strip()]
1.83 µs ± 21.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit [i for i in (s.strip() for s in l) if i]
2.16 µs ± 24.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
随着数据量的增加,结果与往常有点不同......
%timeit [s.strip() for s in l*1000 if s.strip()]
1.57 ms ± 85.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit [i for i in (s.strip() for s in l*1000) if i]
1.45 ms ± 16.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)