嗨,我的python代码需要读取变量文件(以perl格式编写),并识别要在Python脚本中使用的变量。我的变量文件(variable.txt)写为:
$x=1.2;
$y=90.2;
$z=4.2334;
$img1='version1.png';
$img2='version2.png';
我希望我的python代码读取上面的文件并识别变量。我使用以下代码读取文件
fp=open("variables.txt","r")
var=fp.read()
fp.close
print(var)
上面的代码将读取来自variable.txt文件的所有行,但Python代码并未识别它们为变量。我的意思是当我使用这些变量
时 e.g. A=x+y
我想获得A = 91.4,但是错误显示
"名称'x'未定义
当我尝试通过
打开图像时img1=Image.open("%s" %'img1') to open version1.png.
它不起作用并显示
没有这样的文件或目录:'img1'
那么,谁能建议我如何命令,以便以Python脚本阅读的Perl格式的变量?TKS
我强烈建议您不想解析这样的变量文件,而是使用定义的数据传输格式。
查看您的源数据 - 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)。
您也可以从python弹出以运行以下perl程序,该程序将把您的 variables.txt file视为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中打开,捕获输出并将其定义为Python数据结构。
JSON输出看起来像这样。
{
'x': 1.2,
'y': 90.2,
'z': 4.2334,
'img1': 'version1.png',
'img2': 'version2.png'
}
这可以通过在单独的package
中使用do
来包含变量定义文件,并像Perl代码一样对待(例如PHP的require
)。软件包基本上是命名空间定义。然后,它切换回 main 软件包(这是Perl程序中的默认值),然后读取其他命名空间的符号表。其中包含我们刚刚读和定义的所有变量。
由于没有用my
声明它们,因此将它们视为包装变量而不是词汇。因为没有use strict
,所以程序不会抱怨。
符号表可能包含其他内容。当我尝试此操作(没有do
)时,它具有BEGIN
块定义。因为我很懒惰,所以我只是明确地解析了一个。您可以开始查看符号表中这些事物的参考类型,但我认为这不值得。 foo 软件包应该没有其他任何东西。
然后,它将它们作为键分配给哈希参考,然后将其转换为JSON并输出。
我确实相信,将您的数据交换格式更改为JSON,因为Sobrique认为是更好的方法。