首页 > 解决方案 > 将 python 数据导出/转换/生成到 Perl 哈希

问题描述

我在这里的第一篇文章:)

我编写了一个 python 脚本,它做了一些相当多的工作,最后脚本应该将它的一些输出写入 perlmodule。
这个 perlmodule 是用 Perl 编写的测试框架的一部分,但不可修改(我不能对这种类型的数据使用严格的 JSON)。
我目前的解决方案不是最优的(我认为),我想优化代码。我对 perl 不太了解,我只是开始使用它。

我目前的解决方案是在 python 中编写一个“字符串”,它具有要添加到 perlmodule 文件中的 Perl 哈希的正确语法(这个文件包含很多哈希和函数),基本上我想附加到这个 perlmodule 文件在python中。

# Example data generated from the py script
name_of_this_hash = "some_perl_hash_name"
name_of_folder = "some_testfolder"
name_of_file = "some_testfile"
description = "some_perl_description"

folder_and_name = name_of_folder + "/" + name_of_file

# Actual Export / Conversion to Perl Hash
string = "\n \
\n \
\n" + name_of_this_hash + " => \
\n{ \
\n    _desc => '" + description +  "', \
\n    params => { message => '', additional_val => 0 }, \
\n    consts => { enabled => 'net,mem', \
\n        reports => 'net,mem', \
\n    }, \
\n    files => { \
\n        storage_loc_1 => '" + folder_and_name + ".txt', \
\n    }, \
\n    debDesc => $debugDesc, mainvalues => $mainvalDesc, \
\n},"

# Dummy Print, string would be appended to perlmodule
print(string)

Python 代码将生成以下 Perl 哈希:

some_perl_hash_name =>                                                                                                                                                                  
{                                                                                                                                                                                       
    _desc => 'some_perl_description',                                                                                                                                                   
    params => { message => '', additional_val => 0 },                                                                                                                                   
    consts => { enabled => 'net,mem',                                                                                                                                                   
        reports => 'net,mem',                                                                                                                                                           
    },                                                                                                                                                                                  
    files => {                                                                                                                                                                          
        storage_loc_1 => 'some_testfolder/some_testfile.txt',                                                                                                                       
    },                                                                                                                                                                                  
    debDesc => $debugDesc, mainvalues => $mainvalDesc,                                                                                                                                  
}, 

此哈希被以下内容包围:

our $TESTS =
{
# Generated Hashes go here
}
# Some functions that define what the test does

其他地方的框架克隆了这个“TESTS”并根据已设置(生成)的值执行功能。但任何进一步的可能都无关紧要。

如您所见,我正在使用 Perl Hash 语法编写字符串,并通过 python 添加一些变量并结合字符串。我希望能够让它“更干净”,而不是使用字符串来为 Perl 组成哈希。
输出string将是我附加到 Perlmodule 的内容。

如何在 python 中直接创建这个 Perl 哈希,而不使用创建具有正确语法的字符串等插入到 perlmodule 文件中?

谢谢你的建议,曼努埃尔

编辑:更改字符串组成,如第一条评论中所述 :)
EDIT2:我现在明白我正在寻找的是 Perl 中的“哈希”或“哈希表”(而不是“对象”)(非结构化键值),与python中的“dict”相当-我已经改进了我的问题,使其更加清晰/具体
EDIT3:从生成的python代码中添加了示例输出

标签: pythonpython-3.xperl

解决方案


推荐阅读