我正在尝试构建一个与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的图像
在Perl中,模板A20
表示“ 20个字符的空格填充ASCII字符串。”最接近的Python模拟是20s
。 (c
格式适用于单个字符,而非字符串。)您需要:
temp_str = struct.unpack('20s', all)
就是说,打包/解包是针对二进制数据;您的示例看起来文件实际上是文本。如果是这种情况,将其作为文本阅读会更简单,并且避免完全拆包。
我同意迈克尔,看起来您正在处理文本数据,如果是这种情况,您可以像这样拉出两行:
with open(tsk_file_name, 'r')as tsk_file:
first_line = next(tsk_file)
second_line = next(tsk_file)