我需要帮助转换Perl';s";“打开包装”;代码转换为Python代码

我需要帮助转换Perl';s";“打开包装”;代码转换为Python代码,python,perl,binary,Python,Perl,Binary,我正在尝试构建一个Python程序,它的功能与Perl程序完全相同。我知道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 = unpac

我正在尝试构建一个Python程序,它的功能与Perl程序完全相同。我知道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"); 
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

编辑

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"); 
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文档

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

格式:
解包模板,字符串

用于解包的Python文档

图片来源:


编辑2

当我用f.read()读取二进制文件时,这就是打印出来的内容


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

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

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

我同意Michael的观点,看起来你在处理文本数据,如果是这样的话,你可以像这样拉出两行:


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


如果您能描述Perl“解包”在这里的作用,将为读者节省一些工作。@MichaelButscher感谢Michael提出这一点。我添加了一些链接和“解包”功能的简短描述。让我知道是否应该添加更多详细信息。
$temp_str=unpack(“A20”,$all)
将$temp_str设置为$all中的前20个ascii字符,如果在20个字符的末尾有空格,则删除任何尾随空格。。您的文件是如何编写的?有机会看到一个典型行的hextump吗?@zdim我已经打印出文件的内容,其中一个片段已经发布到上面的问题陈述中。我在上面的问题陈述中添加了一个图像。@Michael Carman我在输入代码时遇到了以下错误:temp_str=struct.unpack('20s',all)struct.error:解包需要20字节的缓冲区