我需要将一个目录中的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))
AttributeError:'str'对象没有属性'write'
答案 0 :(得分:1)
如果您查看os.walk
的{{3}},您会发现它不会只返回文件列表。
对于以目录top(包括top本身)为根的树中的每个目录,它会产生一个3元组(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
用于解析整个目录树。要仅获取当前目录中的文件,您可以按照documentation
os.listdir
和os.path.isfile
files = [f for f in os.listdir('/your/path') if os.path.isfile(f)]