gpt4 book ai didi

perl - 在 Perl 中递归打开文件

转载 作者:行者123 更新时间:2023-12-02 07:35:48 25 4
gpt4 key购买 nike

我有一个 Perl 脚本来计算表达式在文件中出现的次数,在这种特殊情况下,它计算在“<”和“>”之间找到的所有内容,因为我希望它解析 .xml 文件。

脚本:

#usr/bin/perl

sub by_count {
$count{$b} <=> $count{$a};
}

open(INPUT, "<[Content_Types].xml");
open(OUTPUT, ">output");
$bucket = qw/./;


while(<INPUT>){
@words = split(/\</);

foreach $word (@words){
if($word=~/($bucket*>)/io){

#print OUTPUT "$word";
#print OUTPUT "\n\n";
$count{$1}++;}

}
}
foreach $word (sort by_count keys %count) {

print OUTPUT "<$word occurs $count{$word} times\n\n";

}

close INPUT;
close OUTPUT;

输出

<Default Extension="xlsx" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/> occurs 1 times

<Default Extension="png" ContentType="image/png"/> occurs 1 times

<Override PartName="/word/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/> occurs 1 times

问题

我想递归地做。我有一个目录,里面有多个子目录,每个子文件夹里面都有一个 [Content_Types].xml 文件。关于如何解析在主目录中找到的每个具有该名称的文件的任何建议?

示例图:

>Directory
>Directory1
>[Content_Types].xml
>Directory2
>[Content_Types].xml
>Directory3
>[Content_Types].xml
.
.
.

>Directory100
>[Content_Types].xml

最佳答案

一种方法是使用模块 Find::File,它将遍历所有子目录以找到您告诉它的内容。它会是这样的:

#!/usr/bin/env perl

use warnings;
use strict;
use File::Find;

find( \&wanted, shift );

sub wanted {
return unless -f $_ && m/\[Content_Types\]\.xml/;
open my $fh, '<', $_ or do {
warn qq|WARNING: Could not open $File::Find::name\n|;
return;
};
open my $ofh, '>', 'output';
my $bucket = qw/./;

while ( <$fh> ) {
## ... your code here ...
}

## ... your code here ...
}

将您希望搜索开始的目录作为参数:

perl script.pl .

关于perl - 在 Perl 中递归打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16689082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com