繁体   English   中英

将数据从php文件加载到python中

[英]Load data from php file into python

我有一个巨大的 php 文件,其中包含许多数组

<?php

$quadrature_weights = array();

$quadrature_weights[2] = array(
    1.0000000000000000,
    1.0000000000000000);

$quadrature_weights[3] = array(
    0.8888888888888888,
    0.5555555555555555,
    0.5555555555555555);

$quadrature_weights[4] = array(
    0.6521451548625461,
    0.6521451548625461,
    0.3478548451374538,
    0.3478548451374538);
?>

实际文件包含 64 个quadrature_weights ,数组内数字的实际小数位数约为 200(为了便于阅读,我在此处减少了数字)。

我想将此文件加载到 python 中并确定要保留的小数位数。 假设我决定保留 4 位小数,输出应该是这样的字典(或其他容器)

quadrature_weights = {
    2: [1.0000, 
        1.0000],
    3: [0.8888,
        0.5555,
        0.5555],
    4: [0.6521,
        0.6521,
        0.3478,
        0.3478]
 }

我不熟悉 php,坦率地说,我不知道如何做到这一点。 我想可以阅读每一行,然后手动进行某种“解码”,但我真的希望避免这种情况。

如果 PHP 文件中的小数位数为 200,那么 PHP截断它,并且如果让 PHP 解析这些数组并输出 JSON 以在 Python 中使用,则 100% 保证您不会得到相同的数字。

就个人而言,我会逐行读取文件并使用正则表达式在 Python 中解析它。 类似的东西:

import re

quadrature_weights = {}
max_decimals = 6

with open("/path/to/file.php") as phpfile:
    key = None
    
    for line in phpfile:
        match_key = re.search("\[(\d+)\]", line)
        if match_key:
            key = match_key.group(1)
            quadrature_weights[key] = []
            continue

        match_value = re.search("([\d.]+)", line)
        if match_value:
            quadrature_weights[key].append(
                round(float(match_value.group(1)), max_decimals)
            )

print(quadrature_weights)

使用像您这样的输入文件,其输出将是(缩进以提高可读性):

{
    '2': [1.0, 1.0],
    '3': [0.888889, 0.555556, 0.555556],
    '4': [0.652145, 0.652145, 0.347855, 0.347855]
}

如果您想始终保持正确的小数位数,即使数字是“1.0000000000000”,那么您应该将数字视为字符串:

match_value = re.search("([\d.]+)", line)
if match_value:
    value = match_value.group(1)
    period = value.index('.')
    max_length = period + 1 + max_decimals

    quadrature_weights[key].append(value[0:max_length])

进行此更改后,dict 将如下所示(缩进以提高可读性):

{
    '2': ['1.000000', '1.000000'],
    '3': ['0.888888', '0.555555', '0.555555'],
    '4': ['0.652145', '0.652145', '0.347854', '0.347854']
}

然后,当您实际需要使用数值进行计算时,您可以将这些值转换为浮点数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM