如何将PHP文件存储的quadrature_weights数组加载到Python并控制小数保留位数
实现方案
最简便的方式是通过PHP原生能力将数组导出为通用JSON格式,再用Python读取处理,全程无需手动解析PHP语法,也无需修改原有大型PHP文件,完全避免语法匹配错误。
步骤1:PHP导出数据为JSON
新建独立PHP脚本export_weights.php,内容如下:
<?php // 替换为你实际的权重文件路径 include 'your_quadrature_weights_file.php'; $export_data = []; // 遍历将数值转为字符串存储,避免JSON编码时丢失200位高精度小数 foreach ($quadrature_weights as $key => $values) { $export_data[$key] = array_map('strval', $values); } // 输出JSON到本地文件 file_put_contents('quadrature_weights.json', json_encode($export_data, JSON_PRETTY_PRINT)); ?>
在命令行执行php export_weights.php即可生成包含全部64组数据的JSON文件,只要你的环境安装了PHP即可运行,Linux、macOS大多默认自带PHP,Windows可直接下载绿色版PHP解压后运行。
步骤2:Python读取并自定义小数保留位数
以下代码支持两种精度模式,普通场景用float即可,需要保留16位以上小数时开启高精度模式使用Decimal类避免精度丢失:
import json from decimal import Decimal, getcontext def load_quadrature_weights(decimal_places: int = 4, high_precision: bool = False): with open("quadrature_weights.json", "r", encoding="utf-8") as f: raw_data = json.load(f) result = {} if high_precision: # 设置精度冗余避免计算误差 getcontext().prec = decimal_places + 10 quantize_rule = Decimal(f"1.{'0' * decimal_places}") for str_key, str_values in raw_data.items(): result[int(str_key)] = [Decimal(v).quantize(quantize_rule) for v in str_values] else: for str_key, str_values in raw_data.items(): result[int(str_key)] = [round(float(v), decimal_places) for v in str_values] return result # 示例调用:保留4位小数,返回格式与你要求完全一致的字典 quadrature_weights = load_quadrature_weights(decimal_places=4)
内容的提问来源于stack exchange,提问作者mortysporty
相关产品推荐
相关产品推荐

