21. Perl 文件操作-文件读写

    xiaoxiao2022-07-04  194

    笔者说过, Perl 语言是非常删除处理文本的, 同样,perl 语言对文件的读写方式也非常简单。

    1 文件句柄

    perl 程序通过文件句柄对文件进行文件读写文件句柄相当于一个指针, 指向这个文件;定义文件句柄有两种方式: 一种是会名称全部时大写, 另一种时是定位为标量, 笔者建议句柄使用标量, 因为perl默认的文件句柄为全部大写.perl 内置句柄有: STDIN, STDOUT, STDERROR 等

    1.1 打开文件句柄

    语法: open 句柄名称, 打开方式, 文件名;常用打开方式: 打开方式含义<以输入方式打开文件, 用于读取文件内容>以输出方式打开文件, 用于写文件, 打开的同时会清空文件内容>>以输出方式打开文件, 用于写文件, 打开时不清空文件, 直接在文件末尾追加内容>:encoding(UTF-8)以指定编码打开文件, 可用于以上三种方式

    1.2 关闭文件句柄

    语法: close 文件句柄名称;当文件不使用的时候建议关闭文件句柄, 减少资源占用.若不手动关闭的话, 当程序结束时, 会自动关闭.

    2 读取文件

    perl 语言对文本文件的读取方式非常便捷, 可以一次性读取,或按流式读取.

    2.1 读取文件全部内容

    当文件比较小的时候, 一次性读取文件所有内容效率更高; 当文件较大时, 可以一行一行读.

    #!/usr/bin/perl #Desc 读取/etc/password 内容 #Auth zongf #Date 2019-05-20 $filename = "/etc/passwd"; #打开文件 open $file, "<", $filename or "cannot open file:$filename\n"; #读取文件全部内容 @lines = <$file>; #关闭文件 close $file; #输出文件 print "$_" foreach @lines;

    2.2 逐行读取

    当文件内容过多时, 可以采取逐行读取.

    #!/usr/bin/perl #Desc 测试perl 逐行读取文本 #Auth zongf #Date 2019-05-20 $filename = "/etc/passwd"; #打开文件 open $file, "<", $filename or "cannot open file:$filename\n"; #逐行读取文件内容 while(<$file>){ print "$_"; } #关闭文件 close $file

    3 写入文件

    在脚本开发中,将程序处理过程或结果写入一个新的文件是一个非常常用的操作,perl 语言写入文件方式非常简单.写入文件可以使用print, printf输出语句, 只需要在print/printf后面指定文件句柄即可. 默认句柄为STDOUT, 即标准输出.

    3.1 清空方式写入文件

    重复执行两次此脚本, 会发现tmp.txt 文件中始终都是一行内容

    #!/usr/bin/perl $filename = "tmp.txt"; #打开文件:清空方式, 打开的同时会清空文件 open $file, ">", $filename or "cannot open file:$filename\n"; #输出字符串到文件中 print $file "hello,world\n"; #关闭文件句柄 close $file;

    3.2 追加方式写入文件

    重复执行脚本多次, 没执行一次, tmp.txt 文件中新增一行hello,world

    #!/usr/bin/perl $filename = "tmp.txt"; #打开文件:清空方式, 打开的同时会清空文件 open $file, ">>", $filename or "cannot open file:$filename\n"; #输出字符串到文件中 print $file "hello,world\n"; #关闭文件句柄 close $file;

    3.3 重新向标准输出

    当文件只需要向一个文件输出内容时,可以直接将标准输出重定向,这样就不用每次在print语句后面添加文件句柄了

    #!/usr/bin/perl $filename = "tmp.txt"; #打开文件:清空方式, 打开的同时会清空文件 open STDOUT, ">", $filename or "cannot open file:$filename\n"; #输出字符串到文件中 print "hello,world\n";
    最新回复(0)