打开并读取目录中的所有二进制文件并输出到列表 - Python
Open and read all binary files from directory an output to lists - Python
(我很欣赏这听起来像是重复的,但我试过很多东西都没有运气)
我正在尝试将包含二进制数据的多个 .pkt 文件的全部内容输出为一系列十六进制列表:(改编自 How to open every file in a folder?)
import glob
path = 'filepath' for filename in glob.glob(os.path.join(path, '*.pkt')):
with open(os.path.join(os.getcwd(), filename), 'rb') as f:
pair_hex = ["{:02x}".format(c) for c in f.read()]
print(pair_hex)
#output
['09', '04', '04', '04', '04', '04', '04', '04', '04', '0b', '09']
['09', '04', 'bb']
['09', 'bb']
['bb']
['09', '04', '0b', '09']
输出是有意义的,因为我正在遍历文件,但我需要的是:
[['09', '04', '04', '04', '04', '04', '04', '04', '04', '0b', '09'],['09', '04', 'bb'],['09', 'bb'],['bb'],['09', '04', '0b', '09']]
所以我可以操纵所有数据。
我尝试应用 append(), "".join(), map() 和 itertools (How to merge multiple lists into one list in python?),但没有任何改变输出。我意识到这可能很简单,但我对 Python 很陌生,所以不确定是否最好继续。
提前致谢!
未测试但尝试
import glob, os
path = 'filepath'
ret = []
for filename in glob.glob(os.path.join(path, '*.pkt')):
with open(os.path.join(os.getcwd(), filename), 'rb') as f:
pair_hex = ["{:02x}".format(c) for c in f.read()]
ret.append(pair_hex)
print(ret)
上面在我的控制台上打印了以下内容,这与您的“所需输出”相同
[['09', '04', '04', '04', '04', '04', '04', '04', '04', '0b', '09'], ['09', '04', 'bb'], ['09', 'bb'], ['bb'], ['09', '04', '0b', '09']]
这就是我用来在我的机器上创建 .pkt 文件的方法,out
设置为“所需输出”的复制粘贴
out = [['09', '04', '04', '04', '04', '04', '04', '04', '04', '0b', '09'],['09', '04', 'bb'],['09', 'bb'],['bb'],['09', '04', '0b', '09']]
for i, a in enumerate(out):
with open(f"{i}.pkt", 'w') as f:
f.write(''.join(map(lambda s: chr(int(s, 16)), a)))
(我很欣赏这听起来像是重复的,但我试过很多东西都没有运气)
我正在尝试将包含二进制数据的多个 .pkt 文件的全部内容输出为一系列十六进制列表:(改编自 How to open every file in a folder?)
import glob
path = 'filepath' for filename in glob.glob(os.path.join(path, '*.pkt')):
with open(os.path.join(os.getcwd(), filename), 'rb') as f:
pair_hex = ["{:02x}".format(c) for c in f.read()]
print(pair_hex)
#output
['09', '04', '04', '04', '04', '04', '04', '04', '04', '0b', '09']
['09', '04', 'bb']
['09', 'bb']
['bb']
['09', '04', '0b', '09']
输出是有意义的,因为我正在遍历文件,但我需要的是:
[['09', '04', '04', '04', '04', '04', '04', '04', '04', '0b', '09'],['09', '04', 'bb'],['09', 'bb'],['bb'],['09', '04', '0b', '09']]
所以我可以操纵所有数据。
我尝试应用 append(), "".join(), map() 和 itertools (How to merge multiple lists into one list in python?),但没有任何改变输出。我意识到这可能很简单,但我对 Python 很陌生,所以不确定是否最好继续。
提前致谢!
未测试但尝试
import glob, os
path = 'filepath'
ret = []
for filename in glob.glob(os.path.join(path, '*.pkt')):
with open(os.path.join(os.getcwd(), filename), 'rb') as f:
pair_hex = ["{:02x}".format(c) for c in f.read()]
ret.append(pair_hex)
print(ret)
上面在我的控制台上打印了以下内容,这与您的“所需输出”相同
[['09', '04', '04', '04', '04', '04', '04', '04', '04', '0b', '09'], ['09', '04', 'bb'], ['09', 'bb'], ['bb'], ['09', '04', '0b', '09']]
这就是我用来在我的机器上创建 .pkt 文件的方法,out
设置为“所需输出”的复制粘贴
out = [['09', '04', '04', '04', '04', '04', '04', '04', '04', '0b', '09'],['09', '04', 'bb'],['09', 'bb'],['bb'],['09', '04', '0b', '09']]
for i, a in enumerate(out):
with open(f"{i}.pkt", 'w') as f:
f.write(''.join(map(lambda s: chr(int(s, 16)), a)))