我需要帮助将Perl的“解压”代码转换为Python代码

问题描述 投票:0回答:2

我正在尝试构建一个与Perl程序完全相同的Python程序。我知道Python具有像Perl这样的解压缩功能,但我无法弄清楚格式。

Perl代码

open(TSK_FILE,"<$tsk_file_name") or die("Failed to open $tsk_file_name\n");
binmode TSK_FILE;
$all = do { local $/; <TSK_FILE> };
close(TSK_FILE);

$temp_str = unpack("A20",$all); # I want to cover these two lines
print(" Operator Name : $temp_str\n"); 

Python代码

try:
    with open(tsk_file_name, 'rb')as TSK_File:
        all = TSK_File.read()
    print(all)
except IOError:
    print('There was an error opening the file!')
    return

temp_str = struct.unpack('c', ) # I got stuck here

------------------------------------------------ --------------------------------

------------------------------------------------ --------------------------------

编辑

用于解压缩的Perl文档https://www.tutorialspoint.com/perl/perl_unpack.htm

“此函数使用TEMPLATE中指定的格式解压缩二进制字符串STRING。”

格式:unpack TEMPLATE, STRING

解压的Python文档https://docs.python.org/3/library/struct.html

来自:https://www.educative.io/edpresso/what-is-the-python-struct-module的图像

enter image description here

python perl binary convert
2个回答
1
投票

在Perl中,模板A20表示“ 20个字符的空格填充ASCII字符串。”最接近的Python模拟是20s。 (c格式适用于单个字符,而非字符串。)您需要:

temp_str = struct.unpack('20s', all)

就是说,打包/解包是针对二进制数据;您的示例看起来文件实际上是文本。如果是这种情况,将其作为文本阅读会更简单,并且避免完全拆包。


0
投票

我同意迈克尔,看起来您正在处理文本数据,如果是这种情况,您可以像这样拉出两行:


with open(tsk_file_name, 'r')as tsk_file:
    first_line = next(tsk_file)
    second_line = next(tsk_file)

© www.soinside.com 2019 - 2024. All rights reserved.