用Python规范化空白

2024-04-28 05:13:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用scrapy构建一个数据提取,并希望规范化从HTML文档中提取的原始字符串。下面是一个字符串示例:

  Sapphire RX460 OC  2/4GB

注意两组由两个空格组成的空白,它们位于字符串文字前面,介于OC2之间。在

Python提供了How do I trim whitespace with Python?中描述的trim,但是它不能处理OC和{}之间的两个空格,我需要将它们折叠成一个单独的空间。在

我尝试在使用scrapy Selector提取数据时使用XPath中的^{},这是可行的,但赋值冗长且向右偏移很强:

^{pr2}$

有没有一种使用Python规范化空白的优雅方法?如果不是一行行,有没有一种方法可以把上面的行分解成更容易阅读的内容而不产生缩进错误,例如

product_title = product.css('h3')
    .xpath('normalize-space((text()))')
    .extract_first()

Tags: 数据方法字符串文档示例htmlproduct规范化
3条回答

您可以使用下面的函数和正则表达式来扫描连续空格,并用1个空格替换它们

import re

def clean_data(data):
    return re.sub(" {2,}", " ", data.strip())

product_title = clean(product.css('h3::text').extract_first())

然后改进清洁功能,不管你喜欢它

与其使用regex,更有效的解决方案是使用join/split选项,请注意:

>>> timeit.Timer((lambda:' '.join(' Sapphire RX460 OC  2/4GB'.split()))).timeit()
0.7263979911804199

>>> def f():
        return re.sub(" +", ' ', "  Sapphire RX460 OC  2/4GB").split()

>>> timeit.Timer(f).timeit()
4.163465976715088

您可以使用:

" ".join(s.split())

其中s是您的字符串。在

相关问题 更多 >