You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl程序内如何指定多类特定格式文件作为处理对象?

Perl新手问题:指定特定格式文件列表处理

问题描述

我是Perl新手,现有如下代码:

my @files=<data/j*.*.txt>;
if (@ARGV) {
  my $test=$ARGV[0];
  $test=lc($test);
  print "Using $test instead\n";
  @files=</data/$test*.*.txt>;
  print "Found @files instead\n";
}
my $outfile='/data/w_c.txt';
my $lotfile='/data/completed.txt';
if (-e $outfile) {
  unlink $outfile;
}

当前代码通过my @files=<data/j*.*.txt>;获取所有匹配j*.*的txt文件,但我希望仅处理以下几类文件:

  • j*.1.txt
  • c*.3.1.txt
  • a*.a.b.txt
  • 其他类似格式文件
    请问如何在程序内直接指定这类文件列表?我需要读取这些文件并提取其中的信息。

解决方案

方法1:直接指定多个glob匹配模式

Perl的glob函数(或<>操作符)支持同时传入多个匹配模式,用空格分隔。你可以直接把需要的格式都列出来:

# 默认匹配指定格式的文件
my @files = glob('data/j*.1.txt data/c*.3.1.txt data/a*.a.b.txt');

# 结合ARGV参数的情况(如果需要根据传入参数调整前缀)
if (@ARGV) {
    my $test = lc($ARGV[0]);
    print "Using $test instead\n";
    # 根据传入参数生成对应模式,示例:替换前缀部分
    @files = glob("data/${test}*.1.txt data/${test}*.3.1.txt");
    print "Found @files instead\n";
}

如果后续需要添加新的文件格式,直接在glob的参数里追加新的模式即可。

方法2:用正则表达式筛选文件

如果你的文件格式规则比较复杂,或者需要更灵活的匹配逻辑,可以先获取目录下所有txt文件,再用正则过滤出符合要求的:

my @all_txt_files = <data/*.txt>;
# 筛选符合指定格式的文件
my @files = grep {
    /^data\/j.*\.1\.txt$/      ||  # 匹配j*.1.txt
    /^data\/c.*\.3\.1\.txt$/   ||  # 匹配c*.3.1.txt
    /^data\/a.*\.a\.b\.txt$/       # 匹配a*.a.b.txt
    # 在这里添加其他格式的正则规则
} @all_txt_files;

注意正则里的.需要转义成\.,否则会匹配任意字符。

读取文件并提取信息

拿到目标文件列表后,就可以循环读取每个文件处理了:

foreach my $file (@files) {
    # 打开文件,失败则报错退出
    open my $fh, '<', $file or die "无法打开文件 $file: $!";
    
    # 逐行读取文件内容
    while (my $line = <$fh>) {
        chomp $line;  # 去掉行尾换行符
        # 这里写你的信息提取逻辑,示例:提取包含"target"的行内容
        if ($line =~ /(target.*)/) {
            my $extracted = $1;
            # 处理提取到的内容,比如写入输出文件
            open my $out_fh, '>>', $outfile or die "无法打开输出文件: $!";
            print $out_fh "$extracted\n";
            close $out_fh;
        }
    }
    
    close $fh;
}

内容的提问来源于stack exchange,提问作者prad001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:50:30