• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

python文件从另文件删除,实现文件的过滤

武飞扬头像
JYT666666
帮助1

目录

问题描述

相关的知识

文件的读取

文件的写入

python中如何把list变成字符串

拆分列表split

代码演示

心得体会


问题描述

  • 最近我在学习kaldi,纯小白新手上路。于是在做kaldi的数据准备的时候,我发现cnceleb1数据集数目不太正确,原来是train集包含了test集。按照常理来说train, test, enroll应该是不相交的。所以我目前的状况是不合理的。于是我需要将ceceleb1的数据进行过滤,把test的数据从train剥离出来。
  • 自然而然地就冒出来第一个问题,也就是今天我要分享的主角:“如何将一个文件从另一个文件中删除,实现文件的过滤”。我就借用我最近做的例子来分享解决办法。
  • 关于文件

        我给大家看看我的文件长什么样子,这样方便接下来的介绍学新通

 上图是tarin的wav.scp ,一共126533条数据

学新通

上图是test集里面的wav.scp,一共17778条数据

很明显,这些是关于数据的信息,我要做的就是对这些信息进行过滤。把test出现的所有信息从train里面删去。

这里要注意的是,删除不是原封不动的删除,在test出现的id所对应的片段,train集里面都要删除。 

        

相关的知识

        参考这篇文章学习文件的写入。看一下几分钟就能学会。

        https://blog.csdn.net/qq_62870237/article/details/121445536

  • python中如何把list变成字符串

        参考以下这篇文章https://www.python51.com/jc/15833.html,很清晰方法也很简单

  • 拆分列表split

        这篇文章讲了list切片和split的不同用法,我看完很有收获https://blog.csdn.net/weixin_45527702/article/details/103951050

        再结合这篇文章,你很快就会明白如何进行切片(强烈推荐)

https://qa.1r1g.com/sf/ask/468721921/

代码演示

我的思路是先打开文件,然后把文件变成list,用list的方法处理文件,最后在整个写入文件。

好了下面就开始进行代码

  • wav.scp文件的过滤
  1.  
     
  2.  
    wavtest = open(r"D:\cnceleb1_train\test\wav.scp",'r')#打开文件
  3.  
    wavtestlist = list(wavtest)#将文件转成list表单
  4.  
     
  5.  
     
  6.  
    spk = []#建立一个叫做spk的空表,用于填写说话人名单
  7.  
    for i in wavtestlist:#遍历完成,此时spk是一个只有说话人id的表单
  8.  
    spk.append(i.split()[0].split('-')[0])
  9.  
     
  10.  
    wav = open(r"D:\cnceleb1_train\wav.scp",'r')#打开文件
  11.  
    wavlist = list(wav)#将文件转成list表单
  12.  
     
  13.  
     
  14.  
    str = []#建立一个空表
  15.  
     
  16.  
    for line in wavlist:#遍历wavlist的每一行
  17.  
    if line.split()[0].split('-')[0] not in spk:#如果wavlist的这一行给对应的说话人id不在spk表单里面,就把这一行信息加入到新建的表单当中
  18.  
    str.append(line)
  19.  
     
  20.  
     
  21.  
    with open(r"D:\cnceleb1_train\wavnew.scp",'w')as file:#输出文件
  22.  
    file.write(''.join(str))
  23.  
    file.close()
学新通

这样便可以生成一个新的文件wavnew.scp , 这就是我们过滤之后的文件。新文件不包括test里面所有说话的所有说话片段。

心得体会

最开始,我理解错意思了,我以为只用把test集的所有数据从train里面剔除出去就好,所以我第一遍筛选虽然成功了,但是没有满足的我的项目需求。

可见,只要把细节学习到位,功能都可以自己改进。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfkfgj
系列文章
更多 icon
同类精品
更多 icon
继续加载