Python如何读取以Perl格式编写的变量



嗨,我的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认为是更好的方法。

最新更新