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

如何用Python将SQL文件中字符串价格转为浮点数?能否原地修改?

解决SQL文件中价格字符串转数值格式及原地修改文件问题

一、修正价格格式转换逻辑

你原来的正则仅替换了$符号,但未去除价格前后的单引号,最终结果仍是带引号的字符串(比如'44490.95'),而我们需要的是无引号的纯数值格式(44490.95)。

调整正则表达式,匹配带单引号和$的完整价格字符串,直接替换为纯数字即可:

import re

def convert_to_num():
    # 匹配 '$数字' 整个带引号结构,捕获数字部分
    pattern = re.compile(r"'(\$)([\d.]+)'")
    file_in = 'car.sql'
    file_out = 'car1.sql'
    
    with open(file_in, 'r', encoding='utf-8') as f_in:
        with open(file_out, 'w', encoding='utf-8') as f_out:
            for line in f_in:
                # 一次性替换该行所有匹配项
                modified_line = pattern.sub(r"\2", line)
                f_out.write(modified_line)

convert_to_num()

二、原地修改SQL文件

直接原地修改文件不能同时以读写模式打开并逐行操作(会导致内容覆盖混乱),推荐两种可靠实现方式:

方式1:读入内存后覆盖写入(适合小文件)

把整个文件内容读入内存,修改后直接覆盖原文件,代码简洁高效:

import re

def convert_inplace():
    pattern = re.compile(r"'(\$)([\d.]+)'")
    file_path = 'car.sql'
    
    # 读取全部内容
    with open(file_path, 'r', encoding='utf-8') as f:
        content = f.read()
    
    # 替换所有匹配项
    modified_content = pattern.sub(r"\2", content)
    
    # 覆盖写入原文件
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(modified_content)

convert_inplace()

方式2:使用fileinput模块(适合大文件)

fileinput模块会自动处理临时文件,修改完成后替换原文件,避免内存占用过高:

import re
import fileinput

def convert_with_fileinput():
    pattern = re.compile(r"'(\$)([\d.]+)'")
    file_path = 'car.sql'
    
    # inplace=True 开启原地修改,backup='.bak' 自动生成原文件备份
    with fileinput.FileInput(file_path, inplace=True, backup='.bak', encoding='utf-8') as f:
        for line in f:
            modified_line = pattern.sub(r"\2", line)
            # 此处print内容会写入原文件,不能用write方法
            print(modified_line, end='')

convert_with_fileinput()

补充说明

  • 正则r"'(\$)([\d.]+)'":精准匹配'$xxx.yy'格式的字符串,捕获其中的数字部分[\d.]+,替换时直接引用该捕获组(\2)。
  • 原地修改前建议备份:方式2通过backup='.bak'自动生成备份;方式1可手动复制原文件后再操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:12:50