0

.pencast ファイル (実際には .zip のみ) から aac ファイルを抽出する bash スクリプトを書き直しています...

import os
import glob
import zipfile

app_path = os.path.dirname(os.path.realpath(__file__)) + os.sep
temp = app_path + 'AudioFiles'

for pencast in (glob.glob( app_path + '*.pencast')):
    f = zipfile.ZipFile(pencast, 'r')
    for number, audio in enumerate(f.namelist()):
        if 'aac' in audio:
            print(os.path.basename(pencast), number, audio)

が返されます(ファイルがどのように見えるかを確認できます)

:!/usr/local/bin/python3 pencast.py

Cancer1-1.pencast 29 userdata/Sessions/PRS-a6959094a/audio-0.aac
Cancer1-1.pencast 32 userdata/Sessions/PRS-a695732e5/audio-0.aac
Cancer1-2.pencast 30 userdata/Sessions/PRS-a696fa7ab/audio-0.aac
Cancer1-2.pencast 33 userdata/Sessions/PRS-a699046df/audio-0.aac
Cancer1-3.pencast 32 userdata/Sessions/PRS-a699046df/audio-0.aac
Cancer1-3.pencast 35 userdata/Sessions/PRS-a696fa7ab/audio-0.aac  

各ファイルを解凍するにはどうすればよいですか。つまり、一意の名前を付けます。

Cancer1-1-1.aac
Cancer1-1-2.aac
Cancer1-2-1.aac

...音声ファイルだけを「AudioFiles」フォルダに移動しましたか?

4

1 に答える 1

1

まず、os.path.join を使用してパスを結合します。

そして、次のようなことを試してください:

import os
import glob
import zipfile

def is_audio(file):
    return 'acc' in file

app_path = os.path.dirname(os.path.realpath(__file__))
os.chdir(app_path)
try:
    os.mkdir('AudioFiles')
except OSError:
    pass

for pencast in (glob.glob('*.pencast')):
    f = zipfile.ZipFile(pencast, 'r')
    for number, audio in enumerate(filter(is_audio, f.namelist())):
        basename = os.path.basename(os.path.splitext(pencast)[0])
        newfilename = '{}-{}.acc'.format(basename, number)
        print(newfilename, number, audio)
        f.extract(audio, os.path.join('AudioFiles', newfilename))

私はコードを試しませんでした。エラーが含まれている可能性がありますが、要点は理解できると思います。

于 2012-04-10T14:13:36.093 に答える