gpt4 book ai didi

python - 如何将 numpy 文件列表转换为二进制文件列表?

转载 作者:太空宇宙 更新时间:2023-11-03 15:30:24 24 4
gpt4 key购买 nike

我需要将一个目录中的 numpy 文件列表转换为另一个目录中的二进制文件列表,并保持相同的顺序和相同的名称:我唯一需要更改的是名称中的扩展名文件的;例如:

我放置 numpy 文件的目录:

   Tracenumber=01_Pltx1.npy
Tracenumber=02_Pltx2.npy
Tracenumber=03_Pltx3.npy
Tracenumber=04_Pltx4.npy
Tracenumber=05_Pltx5.npy
Tracenumber=06_Pltx6.npy

我放置二进制文件的结果目录:

   Tracenumber=01_Pltx1.bin
Tracenumber=02_Pltx2.bin
Tracenumber=03_Pltx3.bin
Tracenumber=04_Pltx4.bin
Tracenumber=05_Pltx5.bin
Tracenumber=06_Pltx6.bin

首先,我使用转换此代码将一个 numpy 文件转换为二进制文件:

import numpy as np
import struct

traces = np.load('C:\\Users\\user\\My_Test_Traces\\1000_Traces_npy\\Tracenumber=01_Pltx1.npy')

f = open('C:\\Users\\user\\My_Test_Traces\\1000_Traces_bin\\Tracenumber=01_Pltx1.bin', 'wb')
for t in traces.flatten():
f.write(struct.pack('f', t))
f.close()

但是现在,我尝试了这段代码:

import os
import numpy as np
import struct
path_For_Binary_Files='C:\\Users\\user\\My_Test_Traces\\1000_Traces_bin'
os.chdir('C:\\Users\\user\\My_Test_Traces\\1000_Traces_npy')
for root, dirs, files in os.walk(r'C:\\Users\\user\\My_Test_Traces\\1000_Traces_npy'):
for file in files:
f=open(file,'r')
trace= np.load(file)
for t in trace.flatten():
file.write(struct.pack(path_For_Binary_Files, t))
file.close()

但是它没有给我我想要的结果。我有这个错误。

file.write(struct.pack(path_For_Binary_Files, t))

属性错误:“str”对象没有属性“write”

最佳答案

如果你看documentation对于 os.walk,您会发现它不仅仅返回文件列表。

For each directory in the tree rooted at directory top (including top itself), it yields a 3-tuple (dirpath, dirnames, filenames).

您应该将 for 循环更改为:

...
for root, dirs, files in os.walk(r'C:\\Users\\user\\My_Test_Traces\\1000_Traces_npy'):
for file in files:
...

但是,您似乎只想解析单个目录中的文件,而 os.walk 用于解析整个目录树。要仅获取当前目录中的文件,您可以按照此question中的建议使用os.listdiros.path.isfile

files = [f for f in os.listdir('/your/path') if os.path.isfile(f)]

关于python - 如何将 numpy 文件列表转换为二进制文件列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42924599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com