打开并读取目录中的所有二进制文件,并输出到Python列表

2024-05-03 11:26:12 发布

您现在位置: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还很陌生,所以不确定是否最好继续

提前谢谢


Tags: 文件to数据pathinforosopen
1条回答
网友
1楼 · 发布于 2024-05-03 11:26:12

未经测试但尝试

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)))

相关问题 更多 >