前面有一个特别简单的例子,得到一个目录里的所有文件的名称,见文章,Praat脚本 | 获取一个目录里的所有文件名称,假如现在有这样的需求,想从一个目录里,这个目录里可能有上千万的文件,仅得到其中的一部分,这部分并没有什么规律,只是有一个列表,想得到这个列表上的文件。这里提供一个Praat脚本
,以及一个Python程序
实现。
假设我们有这样一个目录,里面有大量的文件:
我们有这样一个列表文件,里面有一些文件名,我们的目的就是从上面这个目录里将列表里指定的文件拷贝出来。
000001.TextGrid
000001.wav
000002.TextGrid
000002.wav
000003.TextGrid
000003.wav
000004
000005.TextGrid
000005.wav
000006.TextGrid
999999.wav
有两点要注意:一是这个列表的文件未必存在于上面的目录中,比如999999.wav
这是一个陷阱,它并不存在;二是我们可能得到的列表没有扩展名,程序是否能考虑到?比如000004
,它能否准确找到上面目录文件名是000004
的文件?有了这些思路我们就可以实现这个功能了。
代码段:
Praat脚本实现
脚本实现的思路是,先将需要选择的列表这个文件,以raw text
的形式读进来,然后,问题来了,如果我们采用这样的办法,读进来,再写到目标目录里,我们是否要判断读进来的到底是一个音频或者一个标注的文本,因为当你保存的时候,是音频还是文本,这选项是不同的。这里采用的方法是直接调用Dos
的命令copy
,同样mac
或者linux
下要调用cp
命令,所以这里的脚本相当于windows
的批处理。核心的语句是下面这句:
runSystem: "copy ", filePath$ + " ", targetPath$
回到我们刚才的两个问题,一个是找不到的文件能否给出报错信息;二是如果我们不加扩展名,能不能也将有这个文件名的文件找出来;
if fileReadable(filePath$)
targetPath$ = output_directory$ + "\" + fileName$
if index(fileName$, ".") = 0
runSystem: "copy ", filePath$ + ".*" + " ", targetPath$
else
runSystem: "copy ", filePath$ + " ", targetPath$
endif
else
writeInfoLine: filePath$ + " not exist."
endif
使用fileReadable
判断文件是否存在,不存在的时候打印在Info
窗口。扩展名的判断则是通过判断文件名里是否有.
号。
运行脚本
打开Praat
之后,选择Praat
,Open Praat Script...
,打开这个脚本,然后在脚本窗口选择Run
,Run
,或者直接使用快捷键Ctrl+R
,在弹出来的对话框里,设置以下几个地方,首先以上述示例中的普通话数据为例,本文例子的目录在E
盘的Biaobei_Demo
目录:
- 设置文件夹名称,这里是
E:\Biaobei_Demo\
; - 设置你要提取的文件的一个列表,象上面那样保存在一个文本文件里,将路径设置在这里;
- 设置
保存结果路径
,这里是E:\Biaobei_Demo_select
;
设置完毕,点击OK
,运行脚本,结果可以到E:\Biaobei_Demo_select
查看。Praat Info
窗口会显示有一个文件找不到:
E:\Biaobei_Demo\\999999.wav is not exist.
Python脚本实现
Python
程序是利用的shutil
包,简单的实现:
init_file = os.path.join(input_dir, file_name)
target_file = os.path.join(output_dir, file_name)
if os.path.exists(init_file):
shutil.copy(init_file, target_file)
else:
print(file_name + ' is not exist.')
如何获取脚本 https://github.com/feelins/Praat_Scripts
本站所有Praat脚本
都可以在上述github的项目目录
里找到,如果日常对代码、脚本操作比较熟练的可通过下载、安装、配置github for windows
在自己的电脑上通过git clone
将代码下载到本机,这样的好处是可以跟主站及时更新代码。
不想费如此脑筋,可以通过点击如下图Code位置所示,下载整站的代码,可直接使用。
本文的代码是22-get_selected_parts\Get_Selected_Parts.Praat
,Python
脚本在:00-Python\a03_select_files.py
。点进去之后,还有附带的示例文件,同学可练习使用。脚本里有我的邮箱,有任何问题都可以来信咨询。
关注
关于对本站脚本的使用咨询,以及功能修改,增加等,都可以扫QQ咨询群,私信群主。
版权说明
1、版权归本公众号“极地语音工作室”,原名“语音处理小站”所有;
2、未经本站或者作者允许, 不得任意转载本文内容,否则将视为侵权;
3、转载或者引用本文内容请注明来源及原作者;
4、对于不遵守此声明或者其他违法使用本站内容者,本人依法保留追究权等。