Praat脚本-021 | 获取一个目录里的指定的部分文件

15 篇文章 2 订阅

前面有一个特别简单的例子,得到一个目录里的所有文件的名称,见文章,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之后,选择PraatOpen Praat Script...,打开这个脚本,然后在脚本窗口选择RunRun,或者直接使用快捷键Ctrl+R,在弹出来的对话框里,设置以下几个地方,首先以上述示例中的普通话数据为例,本文例子的目录在E盘的Biaobei_Demo目录:

  1. 设置文件夹名称,这里是E:\Biaobei_Demo\
  2. 设置你要提取的文件的一个列表,象上面那样保存在一个文本文件里,将路径设置在这里;
  3. 设置保存结果路径,这里是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.PraatPython脚本在:00-Python\a03_select_files.py。点进去之后,还有附带的示例文件,同学可练习使用。脚本里有我的邮箱,有任何问题都可以来信咨询。

关注

关于对本站脚本的使用咨询,以及功能修改,增加等,都可以扫QQ咨询群,私信群主。

在这里插入图片描述

版权说明

1、版权归本公众号“极地语音工作室”,原名“语音处理小站”所有;

2、未经本站或者作者允许, 不得任意转载本文内容,否则将视为侵权;

3、转载或者引用本文内容请注明来源及原作者;

4、对于不遵守此声明或者其他违法使用本站内容者,本人依法保留追究权等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极地语音工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值