2011-02-02 6 views
0

У меня есть скрипт python, который работает на трех файлах следующим образом: align.py * .wav * .txt * .TextGrid Однако у меня есть каталог, полный файлов, которые я хочу Переберите. Исходный автор предлагает создать сценарий оболочки для прокрутки файлов. Сложная часть цикла состоит в том, что мне нужно сопоставить три файла одновременно с тремя разными расширениями для правильного запуска скрипта. Может ли кто-нибудь помочь мне разобраться, как создать сценарий оболочки для прокрутки каталога файлов, сопоставить три из них в соответствии с именем (с тремя разными расширениями) и запустить скрипт python для каждого триплета? Спасибо!Сценарий оболочки UNIX для вызова python

+1

Если для каждого файла TextGrid будет файл wave и txt, я просто изменил бы скрипт python, чтобы вывести имена этих двух и передать только список * .TextGrid. Возможно ли изменить скрипт python? – DSimon

+0

Пожалуйста, добавьте несколько файлов примеров и как вы хотите, чтобы их обрабатывали. Ваш вопрос недостаточно описывает то, что вы ищете. – chmullig

+1

Вам вообще не нужны сценарии оболочки; Python может просматривать сами каталоги. – poke

ответ

0

Вы можете использовать glob.glob перечислить только wav файлы, а затем построить subprocess.Popen вызов следующим образом:

import glob 
import os 
import subprocess 

for wav_name in glob.glob('*.wav'): 
    basename,ext = os.path.splitext(wav_name) 
    txt_name=basename+'.txt' 
    grid_name=basename+'.TextGrid' 
    proc=subprocess.Popen(['align.py',wav_name,txt_name,grid_name]) 
    proc.communicate() 
3

Предполагая, что вы используете Баш, вот один вкладыш:

for f in *.wav; do align.py $f ${f%\.*}.txt ${f%\.*}.TextGrid; done 
+0

Это отлично работает! – Alex

Смежные вопросы