首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表中的字符串项转换为浮动项

将列表中的字符串项转换为浮动项
EN

Stack Overflow用户
提问于 2021-08-04 01:05:24
回答 2查看 138关注 0票数 0

我正在尝试将列表中的最后一个“价格”项转换为实际浮动,而不是输出中的字符串。这个是可能的吗?

输出

代码语言:javascript
复制
{'name': 'ADA Hi-Lo Power Plinth Table', 'product_ID': '55984', 'price': '$2,849.00'}
{'name': 'Adjustable Headrest Couch - Chrome-Plated Steel Legs', 'product_ID': '31350', 'price': '$729.00'}
{'name': 'Adjustable Headrest Couch - Chrome-Plated Steel Legs (X-Large)', 'product_ID': '31351', 'price': '$769.00'}
{'name': 'Adjustable Headrest Couch - Hardwood Base (No Drawers)', 'product_ID': '65446', 'price': '$1,059.00'}      
{'name': 'Adjustable Headrest Couch - Hardwood Base 2 Drawers', 'product_ID': '65448', 'price': '$1,195.00'}
{'name': 'Adjustable Headrest Couch - Hardwood Tapered Legs', 'product_ID': '31355', 'price': '$735.00'}
{'name': 'Adjustable Headrest Couch - Hardwood Tapered Legs (X-Large)', 'product_ID': '31356', 'price': '$775.00'}
{'name': 'Angeles Rest Standard Cot Sheets - ABC Print', 'product_ID': 'A31125', 'price': '$11.19'}

PYTHON脚本的启动

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup
import sys

with open('recoveryCouches','r') as html_file:
    content= html_file.read()
    soup = BeautifulSoup(content,'lxml')
    allProductDivs = soup.find('div', class_='product-items product-items-4')
    nameDiv = soup.find_all('div',class_='name')
    prodID = soup.find_all('span', id='product_id')
    prodCost = soup.find_all('span', class_='regular-price')

    records=[]
     
    for i in range(len(nameDiv)):
        records.append({
            "name": nameDiv[i].find('a').text.strip(),
            "product_ID": prodID[i].text.strip(),
            "price": prodCost[i].text.strip()
            })

    for x in records:
        print(x)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-04 01:33:43

您可以尝试这样做,因为您不能同时将$,转换为浮动。您可以同时替换它们,并进行转换。

您可以立即使用re模块替换它们:

代码语言:javascript
复制
import re

for i in range(len(nameDiv)):
    records.append({
        "name": nameDiv[i].find('a').text.strip(),
        "product_ID": prodID[i].text.strip(),
        "price": float(re.sub(r"[$,]","",prodCost[i].text.strip()))
            })

或者,如果所有字符串一开始都有$,那么您可以使用@Forest注释,

代码语言:javascript
复制
float(price[1:].replace(',', ''))

如下所示:

代码语言:javascript
复制
float(prodCost[i].text.strip()[1:].replace(",",""))
票数 1
EN

Stack Overflow用户

发布于 2021-08-04 02:07:12

天真地删除货币符号前缀使您的代码不兼容和脆弱。general solution有点复杂,但是如果假设货币符号仍然是一个前缀,而这是一个加元符号,那么:

代码语言:javascript
复制
from locale import setlocale, LC_ALL, localeconv, atof
from decimal import Decimal
import re

setlocale(LC_ALL, ('en_CA', 'UTF-8'))

# ...

price_str = re.sub(r'\s', '', prodCost[i].text)
stripped = price_str.removeprefix(localeconv()['currency_symbol'])
price = atof(stripped, Decimal)

还请注意,在大多数情况下,Decimalfloat更好地表示货币。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68644272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档