您的python代码需要读取变量文件(以perl格式编写)并识别要在python脚本中使用的变量。我的变量文件(variable.txt)写为:
regexp = %r/((returned|undelivered)\smail|mail\sdelivery(\sfailed)?)/x
我希望我的python代码读取上面的文件并识别变量。我使用下面的代码来读取文件
$x=1.2;
$y=90.2;
$z=4.2334;
$img1='version1.png';
$img2='version2.png';
上面的代码将读取variable.txt文件中的所有行,但python代码不会将它们识别为变量。我的意思是当我使用这些变量时
fp=open("variables.txt","r")
var=fp.read()
fp.close
print(var)
我想获得A = 91.4,但错误显示
“名称'x'未定义
当我试图通过
打开图像时 e.g. A=x+y
它不起作用并显示
没有这样的文件或目录:'img1'
那么,任何人都可以建议我如何命令使pyl脚本读取perl格式的变量? TKS
答案 0 :(得分:3)
我强烈建议您不要想要解析这样的变量文件,而是使用定义的数据传输格式。
查看您的源数据 - JSON看起来不错。为了简化这一过程,请将其插入名称空间,例如哈希:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
use JSON;
my %export = ( x => 1.2,
y => 90.2,
z => 4.2334,
img => [ 'version1.png', 'version2.png' ] );
print Dumper \%export;
open ( my $transfer, '>', 'transfer.json' ) or die $!;
print {$transfer} to_json ( \%export, {pretty => 1});
close ( $transfer );
哪个给出 - 在你的文件中:
{
"z" : 4.2334,
"x" : 1.2,
"img" : [
"version1.png",
"version2.png"
],
"y" : 90.2
}
在任何语言中应该可以轻易读取。 (包括Python)。
答案 1 :(得分:0)
您还可以从Python中运行以运行以下Perl程序,该程序将 variables.txt 文件视为Perl代码,并将其中声明的所有变量包装到JSON对象中,打印那个。
perl -MJSON -e '
package Foo;
do "variable.txt";
package main;
my $export;
foreach my $key (keys %{Foo::}) {
next if $key eq "BEGIN";
$export->{$key} = ${"Foo::$key"};
}
print JSON::encode_json($export);'
因此,您基本上将其作为子流程运行或在Python中打开它,捕获输出并将其JSON解码为Python数据结构。
JSON输出看起来像这样。
{
'x': 1.2,
'y': 90.2,
'z': 4.2334,
'img1': 'version1.png',
'img2': 'version2.png'
}
这可以通过在单独的do
中使用package
来包含变量定义文件并将其视为Perl代码(如PHP的require
)。包基本上是命名空间定义。然后它切换回 main 包(这是Perl程序中的默认包)并读取另一个命名空间的符号表。它包含我们刚读取和定义的所有变量。
因为它们没有用my
声明,所以它们被视为包变量而不是词法。因为没有use strict
,程序不会抱怨。
符号表可能包含其他内容。当我尝试这个时(没有do
)它有一个BEGIN
块定义。因为我很懒,所以我只是明确地解析了那个。您可以开始在符号表中查看这些内容的引用类型,但我认为这不值得付出努力。 Foo 包不应该包含任何其他内容。
然后将它们作为键分配到哈希引用中,然后将其转换为JSON并输出它。
我确实认为将数据交换格式更改为JSON as Sobrique suggests是更好的方法。