簡體   English   中英

Python os和gob:在單個文件與多個文件上執行腳本時,結果不同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM