【问题标题】:How to open a file from different directory in perl?如何在perl中从不同目录打开文件?
【发布时间】:2018-08-28 20:11:16
【问题描述】:

我对perl很陌生,所以我想知道是否有办法

  1. 从不同的目录打开一个文件(例如与 perl script.pl 不同的目录)

  2. 在同一父目录下打开多个同名文件,例如sameName.txt,但子目录不同,例如

    directory:
    - /alias/a/1/sameName.txt
    - /alias/b/1/sameName.txt
    - /alias/c/1/sameName.txt
    

    如上例,但同时,我不想要的其他目录中也有相同的文件,sameName.txt,例如

    directory:
    - /alias/a/2/sameName.txt
    - /alias/b/2/sameName.txt
    - /alias/c/2/sameName.txt
    

    如何自动搜索用户想要的目录,使用用户输入<STDIN>,而不是硬编码到脚本 perl.pl 例如,用户想要目录 / 中的所有 sameName.txt 文件1/sameName.txt,但有不同的父级,即一个 b 和 c 文件夹。我想让它自动读取位于不同文件夹中的那些文件sameName.txt,这样用户就不需要在每次创建像d/1/sameName.txt这样的新路径时调整脚本。

  3. 1234563因为我需要匹配我已经完成脚本的文件之间的数据。

【问题讨论】:

  • 欢迎来到 Stackoverflow。我建议您查看Tour 页面,然后查看Help Center,尤其是How to Ask。虽然人们愿意帮助解决各种查询,但通常希望这些问题是具体的并且与您的代码有关。特别是,对基础代码或教程的请求被认为是题外话。

标签: perl directory


【解决方案1】:
  1. 您可以在任何您喜欢的地方open 一个文件。

文件名参数是一个路径,您可以将其与文件句柄关联以访问其数据:

  my $path = '/alias/a/1/sameName.txt';
  open my $fh, '<', $path or die "Could not open $path: $!";
  1. Perl 不关心不同目录中的另一个文件是否具有相同的名称。

你用不同的文件句柄来区分它们:

  my $path2 = '/alias/a/2/sameName.txt';
  open my $fh2, '<', $path or die "Could not open $path: $!";

您可以通过获取第一个路径的文件名部分并将其与另一个目录放在一起来构造第二个路径。这些是应该已经存在的核心 Perl 模块:

  use File::Basename;
  use File::Spec::Functions;

  my $other_dir = '/alias/a/2';
  my $basename = basename( $path );   # sameName.txt
  my $path2 = catfile( $other_dir, $basename );
  1. 不太确定您要做什么。

您可能对Learning Perllearn.perl.org 上的其他资源感兴趣。

【讨论】:

  • 对不起,我的第二个问题没有完全解释清楚。如何自动搜索用户想要的目录,而不是硬编码到脚本 perl.pl 中,例如,用户想要目录 /1/sameName.txt 中的所有 sameName.txt 文件,但父级不同,这是一个 b 和 c 文件夹。我想让它自动读取位于不同文件夹中的那些文件sameName.txt,这样用户就不能在每次创建像d/1/sameName.txt这样的新路径时调整脚本。
  • @DanialHaris 你在这里得到了答案,而且比你通常在这样一个广泛的问题上得到的答案要多得多。 (此站点不适合介绍性解释,而是针对您的代码的特定问题。)我鼓励您使用现有的知识并尝试自己做没有“完全解释的事情, 并查看答案中链接的材料。
  • 更新您的问题,而不是在 cmets 中进行澄清。
猜你喜欢
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2013-05-05
  • 1970-01-01
  • 2012-09-30
相关资源
最近更新 更多