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

How to convert a list of numpy files to a list of binary files?

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

我放置numpy文件的目录:

1
2
3
4
5
6
   Tracenumber=01_Pltx1.npy
   Tracenumber=02_Pltx2.npy
   Tracenumber=03_Pltx3.npy
   Tracenumber=04_Pltx4.npy
   Tracenumber=05_Pltx5.npy
   Tracenumber=06_Pltx6.npy

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

1
2
3
4
5
6
   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文件转换成一个二进制文件:

1
2
3
4
5
6
7
8
9
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()

但是现在,我已经尝试过这个代码:

1
2
3
4
5
6
7
8
9
10
11
12
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))。

attributeError:"str"对象没有"write"属性


如果您查看os.walk的文档,您将看到它不会简单地返回文件列表。

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

您应该将for循环改为:

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

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

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