当前位置: 首页 > 知识库问答 >
问题:

如何读取在perl中被压缩和焦油的文件

夏知
2023-03-14

我已将文本文件“FilenameKeyword.txt”文件放在E:/Test文件夹中,在我的perl脚本中,我正在尝试遍历该文件夹,并且我正在尝试找到一个带有文件名的文件,其中包含字符串“关键字”,后来我在我的脚本中打印了该文件的内容。现在我希望对放置在压缩的tar文件中的文件做同样的事情。

我试图从中提取详细信息的假设文件:E:\test.tar.gz

想知道在perl中是否有可能搜索和读取文件而不解压缩/解压缩假设文件。如果这是不可能的,我还将分配一些临时内存来解压文件,在从特定文本文件中提取内容后应将其删除。

在互联网上搜索时,我可以使用Archive::Extrac来提取和读取gzip/tar文件,因为我是Perl的新手——我真的很困惑我应该如何使用它。你能帮忙吗……

输入文件:文件名关键字.txt

脚本:

use warnings;
use strict;

my @dirs = ("E:\\Test\\");
my %seen;
while (my $pwd = shift @dirs) {
        opendir(DIR,"$pwd") or die "Cannot open $pwd\n";
        my @files = readdir(DIR);
        closedir(DIR);
        foreach my $file (@files) 
        {
                if (-d $file and ($file !~ /^\.\.?$/) and !$seen{$file}) 
                {
                        $seen{$file} = 1;
                        push @dirs, "$pwd/$file";
                }
                next if ($file !~ /Keyword/i);
                my $mtime = (stat("$pwd/$file"))[9];
                print "$pwd$file";
                print "\n";
                open (MYFILE, "$pwd$file");
                while (my $line = <MYFILE>){
                #print $line;
                my ($date) = split(/,/,$line,2);
                if ($line =~ s!<messageText>(.+?)</messageText>!!is){
                print "$1";
                }
                }

        }
}

输出(在测试程序文件中放在E:\test下):

E:\Test\FilenameKeyword.txt
1311 messages Picked from the Queue.

寻求帮助来检索E:\test.tar.gz下的文件内容

期望输出:

E:\test.tar.gz\FilenameKeyword.txt
1311 messages Picked from the Queue. 

共有2个答案

傅涵忍
2023-03-14

如果您的文件仅被 gzip 压缩,则可以按照此处概述的“流式”方式读取其内容(通过管道连接到/来自没有系统或反引号的子进程 - gzipped tar 文件)。本文说明了一种使用 open 和 fork 来打开和解压缩文件,然后将其提供给 Perl 的 while(),从而允许您迭代它的技术。

由于 tar 基本上是连接事物,因此有可能使其适应您的方案。

邬阳
2023-03-14

我被困在使用CPAN模块,CPAN模块不适合我,因为我在同一台机器上有预言机10g企业版,由于做了一些软件冲突活动状态perl无法编译和参考CPAN模块的perl库,我已经卸载了我的机器中的预言机来使这个工作....

#!/usr/local/bin/perl
use Archive::Tar;
my $tar = Archive::Tar->new;
$tar->read("test.tar.gz");
$tar->extract();
 类似资料:
  • 问题内容: 我想从csv(文本)文件逐行读取(在Python 2.7中),该文件是7z压缩的。我不想解压缩整个(大)文件,而是流线。 我尝试失败。我收到数据错误。请注意,此代码尚未逐行读取: 输出: 问题答案: 这将允许您迭代行。它部分源自我在另一个问题的答案中找到的一些代码。 在该时间点(),该模块未实现允许将存档成员作为字节流或字符流读取的API-其类仅提供了一次解压缩并返回成员中未压缩数据的

  • 我正试图从压缩的csv文件中获取数据。有没有一种方法可以做到这一点,而不解压整个文件?如果没有,我如何解压文件并有效地读取它们?

  • 问题内容: 任何人都可以向我展示在我一直在搜索的Java中压缩和解压缩tar.gzip文件的正确方法,但是我能找到的最多是zip或gzip(单独)。 问题答案: 我最喜欢的是plexus-archiver-请参阅GitHub上的资源。 另一个选项是Apache commons- compress- (请参阅mvnrepository)。 使用plexus-utils,用于取消存档的代码如下所示:

  • 我的 tar 文件位于以下位置: 使用 tar 命令: 命令显示我: 我的计划或更好的愿望是这样处理: 我只想要一个tar文件并将其存储到不同的目录……但是这个带有-C的命令不起作用…它提取tar的所有文件…… 我的问题是,是否可以只提取一个Tar文件,而不将提取到目录中??另一个问题:是否有可能只提取tar文件而不提取文件夹这可能是更好的方法,但我不知道如何。。。? 不,没有路径我就不能保存文件

  • 问题内容: 使用python从gz压缩的文本文件中读取一行很容易,而无需完全提取该文件?我有一个大约200mb的text.gz文件。当我提取它时,它变成7.4gb。这不是我必须阅读的唯一文件。对于整个过程,我必须读取10个文件。尽管这将是一个顺序的工作,但我认为在不影响全部信息的情况下做到这一点将是明智之举。我什至不知道有可能。如何使用python完成?我需要逐行阅读文本文件。 问题答案: 您是否

  • 我正在尝试将压缩的csv文件(.bz2)读取为数据帧。我的代码如下 当我在IDE中尝试时,这是可行的。我可以读取数据并对其进行处理,但当我尝试使用maven构建数据并在命令行上运行它时,会出现以下错误 我不确定我是否在这里错过了什么。读取csv文件是否有一些依赖项?根据留档,Spark 2. x. x内置了对此的支持。