[英]Python os and gob: Different results when executing a script on a single file vs. multiple files
我正在编写一个Python Shell脚本,该脚本可以在单个.wav文件或指定目录中的所有.wav文件上执行函数(将一组方法从2D numpy数组写入数据文件)。
例如,
> myscript.py --file=audio.wav --data="data.tab"
应该将一个浮点值写入data.tab。
> myscript.py --path="path/with/audio_files" --data="data.tab"
应该将一组浮点值写入data.tab。
我有一个包含一堆WAV文件的文件夹。 当我在单个文件(使用--file选项)上执行路径时,结果与使用--path选项处理文件时的结果不同。
我已经通过3种方式实现了路径文件:
1)使用os.listdir()
for audioFile in os.listdir(options.path):
if audioFile.endswith('.wav'):
foo(audioFile)
2)使用os.walk()
for r, d, f in os.walk(options.path):
for audioFile in f:
if audioFile.endswith('.wav'):
foo(audioFile)
3)使用glob.glob()
for audioFile in glob.glob("*.wav"):
foo(audioFile)
方法1和2返回相同的结果。 方法3返回一个不同的结果。 这三种方法返回的结果都不同于处理单个文件的结果。
使用os或gob模块时会有什么不同?
编辑:这是我在目录中处理所有.wav文件的地方:
for r, d, f in os.walk(options.path):
for audioFile in f:
if audioFile.endswith('.wav'):
# Add MFCC 1-12 to data.
mfcc12(audioFile, sampleRate, data)
这在mfcc12()中:
# mfccs is a 2D numpy array.
# Each column corresponds to one feature of the audiofile
for i in range(mfccs[0].size):
mfccMean = mfccs[:, i].mean()
mfccStdDev = mfccs[:, i].std()
data.write(str(mfccMean) + '\t' + str(mfccStdDev) + '\t')
我正在使用YAAFE从音频文件中提取功能。
glob
函数执行Unix样式的操作,忽略名称以开头的文件.
:
>>> os.listdir('.')
['conn.c', 'Makefile', 'conn.o', '.depend', 'conn.c.orig', 'conn']
>>> glob.glob('*')
['conn.c', 'Makefile', 'conn.o', 'conn.c.orig', 'conn']
(注意, fnmatch.fnmatch
不这样做;跳过点文件的代码是在glob.glob1
)。 大概您有一些点文件。
我想我解决了问题。 问题不是我的mfcc提取设置,不是Python代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.