【发布时间】:2021-02-23 20:21:55
【问题描述】:
我需要我的代码同时在 Linux 和 Windows 上工作。我有一个二进制文件,其中包含一个带有Date 和Time 信息的文本标题,我想提取这些信息。提取部分的示例(即信息如何保存在 txt 标头中)在代码的注释部分中。整个代码都是用 Python 编写的,所以我希望这个提取也用 Python 完成。在 Linux 中,我会简单地使用 subprocess 和 grep (ref):
import subprocess
hosts = subprocess.check_output("grep -E -a 'Date' /path/Bckgrnd.bip", shell=True)
sentence = hosts.decode('utf-8')
# '---------------------------- Date:09/09/2020 Time:11:26:19 ----------------------------\n Capture Time/Date:\t11:26:17 on 09/09/2020\n---------------------------- Date:09/09/2020 Time:11:26:19 ----------------------------\n'
date = sentence[sentence.index('Date:')+5:sentence.index('Date:')+13]
time = sentence[sentence.index('Time:')+5:sentence.index('Time:')+13]
print(date, time)
# 09/09/20 11:26:19
问题是这在 Windows 上会失败。另一种方法是在 Python 中加载文件:
file_input = /path/Bckgrnd.bip
with open(file_input, 'rb') as f:
s = f.read()
print(s.find(b'Date'))
# 498
date = s[s.find(b'Date')+5:s.find(b'Date')+13].decode('utf-8')
time = s[s.find(b'Time')+5:s.find(b'Time')+13].decode('utf-8')
print(date, time)
这有一个主要问题。它必须将整个文件读入内存,如果文件很大,那就是个问题。有没有办法用 grep 解决操作系统问题?在不加载整个二进制文件的情况下,在纯 python 中是否有替代方案?
更新:
关于速度——我相信grep 比纯 Python 更快,因此拥有它不仅会在内存方面而且在速度方面会更好。
请注意,即使 grep 也将其视为二进制文件(如提到的 -a 标签,例如 here)。
【问题讨论】: