You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python(BeautifulSoup)如何避免字符串被解析为科学计数法?

问题:XML解析提取字符串时被误识别为科学计数法

使用BeautifulSoup解析XML,从标签文本中提取第一个空格前的子串(如1E001、0E001这类5字符编码)时,最终得到的结果是数值(比如1E001变成10),而非原始字符串。即使尝试用str()或f-string转换也无法解决,示例标签文本:

'1E001 “Technology” according to the General Technology Note for the “development” or “production” of items controlled'

原因分析

问题并非出在字符串提取阶段,而是写入CSV文件时被自动转换。csv.writer默认会将符合数值格式(包括科学计数法格式)的字符串自动解析为数值类型,导致1E001被转换成10。

解决方案

方案1:CSV写入时强制非数值内容加引号

修改CSV写入代码,添加quoting=csv.QUOTE_NONNUMERIC参数,让所有非数值内容被引号包裹,避免自动转换:

with open(f"ccl_{today}.csv", "w", encoding="utf-8", newline="") as csvfile:
    csvwriter = csv.writer(csvfile, delimiter="|", quoting=csv.QUOTE_NONNUMERIC)
    csvwriter.writerow(fields)
    csvwriter.writerows(rows)

方案2:给字符串添加零宽空格标记

在提取的ECCN字符串前添加零宽空格(不可见字符),让CSV识别为纯文本:

def find_eccn(text:str) -> str:
    result = text[:text.find(" ")]
    return f"\u200B{result}"

注:零宽空格不会影响视觉显示,但后续处理数据时可能需要去除该字符

方案3:返回带引号的字符串

直接给提取的字符串添加引号,写入CSV后保留原始格式:

def find_eccn(text:str) -> str:
    result = text[:text.find(" ")]
    return f'"{result}"'

注:此方案会让CSV中的ECCN字段带引号,适合直接查看无需后续处理的场景

内容的提问来源于stack exchange,提问作者txmountaineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:40:42