Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Perl,使用带有部分文件名的数组来匹配目录的文件。

Perl,使用带有部分文件名的数组来匹配目录的文件。
EN

Stack Overflow用户
提问于 2015-03-02 12:29:57
回答 2查看 236关注 0票数 0

因此,我有一个目录,其中的文件名如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HG00119.mapped.ILLUMINA.bwa.GBR.low_coverage.20101123.bam.bai
HG00119.mapped.ILLUMINA.bwa.GBR.exome.20120522.bam_herc2_data.bam
HG00117.mapped.illumina.mosaik.GBR.exome.20110411.bam_herc2_phase1.bam
HG00117.mapped.illumina.mosaik.GBR.exome.20110411.bam.bai
NA20828.mapped.illumina.mosaik.TSI.exome.20110411.bam_herc2_phase1.bam
NA20828.mapped.ILLUMINA.bwa.TSI.low_coverage.20130415.bam_herc2_data.bam

我有一个input.txt文件,它包含在每一行中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NA20828  
HG00119

如您所见,input.txt文件在目录中具有文件名的开头。

我想要做的是过滤input.txt中具有名称的目录中的文件(在本例中仅为开头)。我不知道我是否清楚,但这是我迄今所做的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use strict;
use warnings;

my @lines;                              
my @files = glob("*.mapped*");

open (my $input,'<','input.txt') or die $!;         
while (my $line = <$input>) {
    push (@lines, $line);               
}
close $input;

我使用glob只过滤名称中映射的文件,因为我在那里有其他我不想查找的文件。

我尝试了一些foreach循环,也尝试了grep和regex,我很确定我的方法是正确的,我认为我的错误可能是关于范围的。

我会感谢任何帮助的人!谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-02 13:34:03

好的,首先-您的while循环是多余的。如果从列表上下文中的文件句柄读取,它会读取全部内容。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my @lines = <$input>; 

将执行与while循环相同的操作。

现在,对于您的模式-您将一个列表与另一个列表进行匹配,但部分匹配。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chomp ( @lines );
foreach my $file ( @files ) {
    foreach my $line ( @lines ) {
        if ( $file =~ m/$line/ ) { print "$file matches $line"; }
    }
}

(是的,像grep或map之类的东西可以做到这一点,但我总是发现这两个让我头疼--它们更整洁,但它们在隐式循环,所以算法效率不高)。

票数 1
EN

Stack Overflow用户

发布于 2015-03-02 15:21:41

您可以从input.txt的内容构建一个正则表达式,如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my @lines = do {    
    open my $fh, '<', 'input.txt' or die $!;         
    <$fh>;
};
chomp @lines;
my $re = join '|', @lines;

然后使用以下方法查找所需文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my @files = grep /^(?:$re)/, glob '*.mapped*';

请注意,如果input.txt中的列表包含任何regex元字符,如.*+等,则需要转义它们,可能需要使用如下所示的quotemeta

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my $re = join '|', map quotemeta, @lines;

而且,除非您确信文件中永远不会有这样的字符,否则最好还是这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28818912

复制
相关文章
python-修改目录下带有特定字符的所有文件内容,文件名字,目录名字
写了一个小工具,会检索给定目录下所有文件以及内容,目录的指定的字符,并替换想要的字符
全栈程序员站长
2021/05/19
2K0
glob:Python中文件名的匹配
既然在Pathlib库中提到了glob()函数,那么我们就专门用一篇内容讲解文件名的匹配。其实我们有专门的一个文件名匹配库就叫:glob。
luckpunk
2023/09/15
4200
glob:Python中文件名的匹配
glob:Python中文件名的匹配
既然在Pathlib库中提到了glob()函数,那么我们就专门用一篇内容讲解文件名的匹配。其实我们有专门的一个文件名匹配库就叫:glob。
luckpunk
2023/09/14
3880
Python文件名后缀_python获取目录下所有文件的文件名
使用 os.path.splitext(file)[0] 可获得 文件名 。 使用 os.path.splitext(file)[-1] 可获得以 . 开头的 文件后缀名 。
全栈程序员站长
2022/11/09
4.6K0
python获取文件所在目录和文件名,以及检索当前文件名的方法
python获取文件所在目录和文件名,以及检索当前文件名的方法 print(__file__) print(sys.argv[0]) print(os.path.dirname(__file__)) print(os.path.split(__file__)[-1]) print(os.path.split(__file__)[-1].split('.')[0]) 对应的返回结果: D:/office3/python/python_py/compare/test.py D:/office3/pytho
学到老
2019/02/14
1.6K0
python获取文件所在目录和文件名,以及检索当前文件名的方法
python获取文件所在目录和文件名,以及检索当前文件名的方法 print(__file__) print(sys.argv[0]) print(os.path.dirname(__file__)) print(os.path.split(__file__)[-1]) print(os.path.split(__file__)[-1].split('.')[0]) 对应的返回结果: D:/office3/python/python_py/compare/test.py D:/office3/python/p
学到老
2018/03/16
13.6K0
Perl遍历目录
1、默认activePerl下的采用的编码是gbk,所以需要将字符串转为gbk才不会显示乱码
meteoric
2018/11/15
1.5K0
Linux-压缩成带有时间文件名的文件
tar -zcvf uip-$(date +%Y%m%d-%H%M).tar.gz uip
小小工匠
2021/08/16
1K0
java 获取当前目录文件名
示例 文件夹和文件名如图所示 只获取当前文件夹中的所有文件夹和文件名,而不包含子文件,如果遍历所有子文件夹,需要用到递归! 知识点 file.listFiles()获取当前文件夹下File类型的数组
演化计算与人工智能
2020/08/14
3.7K0
linux中操作带有空格和特殊字符的文件名
注意:我们可以拥有任何类型的文件,但为了简单和易于实现,我们将在整篇文章中处理文本文件 (.txt)。
入门笔记
2022/06/02
7.5K0
python3获取目录下的文件名
在处理分类问题制作标签的时候用到了指定文件夹下的文件名获取,在这里做个小结: OS模块是python中一个常用于处理文件信息的模块,因此相关文件的处理都会用到OS模块。获取文件名常用到的函数为 os.walk((top, topdown = True, onerror = None, followlinks = False)) 具体使用方法可 参考 写的非常详细。 os.listdir * 获取指定目录下的文件夹名(不包含子目录)
py3study
2020/01/10
2.4K0
目录内文件名导出到Excel文件
1、打印文件夹列表时可以包含其他列。 2、打印文件列表时,可以包含标准文件信息,如文件名,扩展名,类型,所有者和属性以及可执行文件信息(EXE,DLL,OCX),如文件版本,描述,公司等。 3、此外,还可列出音轨,标题,艺术家,专辑,流派,视频格式,每像素位数,每秒帧数,音频格式,每通道位数等多媒体属性(MP3,AVI,WAV,JPG,GIF,BMP)。 4、您可以打印的另一组列是 Microsoft Office 文件(DOC,XLS,PPT),因此您可以查看文档标题,作者,关键字等,而无需逐一打开这些文件。 5、对于每个文件和文件夹,还可以获取其CRC32,MD5,SHA-1和Whirlpool哈希码,以便您可以验证该文件未被修改。 6、打印文件夹中的文件进一步自定义。 7、大量的选项允许您完全自定义输出的外观。您可以设置文件和文件夹的排序方式,以便随时显示它们。您可以定义列顺序,以便最重要的列立即可见。国际显示格式选项允许您根据当地需要调整输出。列表可以包含指向实际文件和目录的链接,这样您就可以将列表放在具有可点击内容的网页上。 8、HTML显示样式完全自定义 – 您可以更改背景颜色,标题,目录行,奇数和偶数文件行以及周围框架的单独样式。 9、您可以通过对文件名,日期,大小或属性应用过滤器来限制文件列表。 10、目录Lister Pro也可以集成到Windows资源管理器的上下文菜单中,因此您甚至不需要打开应用程序即可生成列表。 11、命令行界面支持可以从 Windows任 务计划程序运行的自动化列表。 12、检查文件夹大小或查找大文件夹 13、使用 Directory Lister Pro,您还可以找出给定的目录大小,按文件夹大小进行分类,并检查哪些文件夹占用了磁盘上的最多空间。您还可以使用尺寸过滤器选项在PC上找到最大的文件。
云深无际
2021/04/14
5.7K0
目录内文件名导出到Excel文件
linux下文件数、目录数、文件名长度的各种限制
以下测试都是在没有优化或修改内核的前提下测试的结果 1. 测试目的:ext3文件系统下filename最大字符长度   测试平台:RHEL5U3_x64   测试过程: LENTH=`for i in {1..255};do for x in a;do echo -n $x;done;done` touch $LENTH 当增加到256时,touch报错,File name too long linux系统下ext3文件系统内给文件/目录命名,最长只能支持127个中文字符,英文则可以支持255个字符 2. 测试目的:ext3文件系统下一级子目录的个数限制   测试平台:RHEL5U3_x64   测试过程: [root@fileserver maxdir]# for i in {1..32000};do mkdir $i;done mkdir: cannot create directory `31999': Too many links mkdir: cannot create directory `32000': Too many links ext3文件系统一级子目录的个数为31998(个)。 Linux为了cpu的搜索效率而规定的,要想改变数目大概要重新编译内核.  3. 测试目的:ext3文件系统下单个目录里的最大文件数   测试平台: RHEL5U3_x64   测试过程:   单个目录下的最大文件数似乎没什么特别限制,也是受限于所在文件系统的inode数限制:   df -i或者使用tune2fs -l /dev/sdaX或者dumpe2fs -h /dev/sdaX查看可用inode数,后两个命令    输出结果是一样的,但是跟df所得出的可用inode数会有些误差,至今不明白什么原因。   网上常用两种解决办法:   1) 重新mkfs,ext3默认block大小4096 Bytes,block设置小一些inode数设置大一些   2) 使用loopback文件系统临时解决:       在/usr中(也可以在别处)创建一个大文件,然后做成loopback文件系统,将原来的文件移到这个       文件系统中,并将它mount到/usr下合适的位置。这样可以大大减少你/usr中的文件数目。但是系统       性能会有点损失。 4. 测试目的: 打开文件数限制(文件句柄、文件描述符)   测试平台: RHEL5U3_x64   ulimit -n 65535设置,或者/etc/security/limit.conf里设置用户打开文件数、进程数、CPU等
一见
2019/03/14
5.5K0
Python获取目录下所有文件名
Python实现获取目录下所有文件名称,其中不包含目录名称,使用os类,并将输出存入列表中,下面一起来看代码吧!
申霖
2020/02/14
4.4K0
解决php ZipArchive生成压缩文件带有目录层级的问题
如果你使用php ZipArchive  addFile 方法把多个文件压缩在1个目录时会产生一个问题,我们只想要在当前目录把所有文件放在一起,结果他安装每个文件的所在目录在当前目录创建一遍,解决方式如下:
高久峰
2023/06/03
9100
使用字符串操作来获取图片路径中的文件名
代码使用了字符串操作来获取路径中的文件名,并将结果存储在变量fileName中,然后通过console.log输出了结果。
王小婷
2023/08/13
2710
点击加载更多

相似问题

根据部分匹配更新目录中的文件名

24

perl regex匹配的部分作为输出文件名

13

如何使用Perl的grep通过匹配文件名中的模式来查找特定文件

24

Perl点文件名匹配

12

目录中的perl - grep文件名

213
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文