[英]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.