加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl重点学习笔记之目录文件操作

发布时间:2020-12-15 23:52:56 所属栏目:大数据 来源:网络整理
导读:一.打开文件: 语法为open (filevar,filename),其中filevar为文件句柄,或者说是程序中用来代表某文件的代号,filename为文件名,其路径可为相对路径,亦可为绝对路径。 ????open(FILE1,"file1"); ????open(FILE1,"/u/jqpublic/file1"); ??打开文件时必须决

一.打开文件:

语法为open (filevar,filename),其中filevar为文件句柄,或者说是程序中用来代表某文件的代号,filename为文件名,其路径可为相对路径,亦可为绝对路径。

????open(FILE1,"file1");
????open(FILE1,"/u/jqpublic/file1");
??打开文件时必须决定访问模式,在PERL中有三种访问模式: 读、写和添加。后两种模式的区别在于写模式将原文件覆盖,原有内容丢失,形式为: open(outfile,">outfile");而添加模式则在原文件的末尾处继续添加内容, 形式为:open(appendfile,">>appendfile")。要注意的是,不能对文件同时进行读和写/添加操作。
??open的返回值用来确定打开文件的操作是否成功,当其成功时返回非零值,失败时返回零,因此可以如下判断:
????if (open(MYFILE,"myfile")) {
????# here's what to do if the file openedsuccessfully
????}
??当文件打开失败时结束程序:
???? unless (open (MYFILE,"file1")){
????die ("cannot open input filefile1n");
????}

??亦可用逻辑或操作符表示如下:
????open (MYFILE,"file1") || die("Could not open file");

??当文件操作完毕后,用close(MYFILE);关闭文件。

二.写入文件
????open(OUTFILE,">outfile");
????print OUTFILE ("Here is an outputline.n");
??注:STDOUT、STDERR为标准输出和标准错误文件,通常为屏幕,且不需要打开。

三.文件是否存在

if (-e "/path/file1") {
????print STDERR ("File file1exists.n");
????}

四.perl中命令行参数的使用

象C一样,PERL也有存储命令行参数的数组@ARGV,可以用来分别处理各个命令行参数;与C不同的是,$ARGV[0]是第一个参数,而不是程序名本身。
????$var = $ARGV[0]; # 第一个参数
????$numargs = @ARGV; # 参数的个数
??PERL中,<>操作符实际上是对数组@ARGV的隐含的引用,其工作原理为:
1、当PERL解释器第一次看到<>时,打开以$ARGV[0]为文件名的文件;
2、执行动作shift(@ARGV); 即把数组@ARGV的元素向前移动一个,其元素数量即减少了一个。
3、<>操作符读取在第一步打开的文件中的所有行。
4、读完后,解释器回到第一步重复。
??例:
????@ARGV = ("myfile1","myfile2"); #实际上由命令行参数赋值
????while ($line = <>) {
????print ($line);
????}
??将把文件myfile1和myfile2的内容打印出来。

操作符 描述
-b 是否为块设备
-c 是否为字符设备
-d 是否为目录
-e 是否存在
-f 是否为普通文件
-g 是否设置了setgid位
-k 是否设置了sticky位
-l 是否为符号链接
-o 是否拥有该文件
-p 是否为管道
-r 是否可读
-s 是否非空
-t 是否表示终端
-u 是否设置了setuid位
-w 是否可写
-x 是否可执行
-z 是否为空文件
-A 距上次访问多长时间
-B 是否为二进制文件
-C 距上次访问文件的inode多长时间
-M 距上次修改多长时间
-O 是否只为“真正的用户”所拥有
-R 是否只有“真正的用户”可读
-S 是否为socket
-T 是否为文本文件
-W 是否只有"真正的用户"可写
-X 是否只有"真正的用户"可执行

五.目录函数

1.mkdir

mkdir(dirname,permissions);

2.chdir

chdir(dirname);

3.opendir(dirvar,dirname)

dirvar:目录变量

dirname:目录名

4.closedir(dirname)

关闭目录

5.rename(oldname,newname)

重命名

6.unlink(filelist)

删除文件,这里其实是删除的文件链接

7.创建链接

link(newlink,file)

创建一个file的软链接,删除一个文件的链接后还可以删除另一个

8.chmod(permissions,filelists)

改变文件权限

9.stat(file)

获取文件状态。参数file可为文件名也可为文件变量。返回列表元素依次为:

  • 文件所在设备
  • 内部参考号(inode)
  • 访问权限
  • 硬链接数
  • 属主的(数字)ID
  • 所属组的(数字)ID
  • 设备类型(如果file是设备的话)
  • 文件大小(字节数)
  • 最后访问时间
  • 最后修改时间最后改变状态时间
  • I/O操作最佳块大小
  • 分配给该文件的块数

    10.chmop命令:

    如果字符串结尾有换行符,chomp 可以去掉它。这基本上就是它能完成的所有功能,如下例: $text = “a line of text/n”; #也可以由<STDIN>输入 chomp($text); #去掉换行符(/n)。 它非常有用,基本上你的每一个程序都会用到它。如你将知道,这是将字符串末尾换行符去掉的最好方法。基于Perl 中的一条基本原则:在需要使用变量的地方,可以使用赋值表达式来代替。我们有更简单的使用chomp 的方法。Perl 首先做赋值运算,再使用这个变量。因此使用chomp 的最常用方法是: chomp ($text = <STDIN>); #读入,但不含换行符 $text = <STDIN>; chomp ($text); #同上,但用两步完成 第一眼见到时,第一种组合的方法看起来复杂些。如果把上述其看成两步操作,读一行再chomp,那写成两个语句的方法 看起来自然些。如果将其看作一个操作,读入一行但不包括换行符,那写成一个语句的方法更恰当。由于绝大多数Perl 程序员使用第一种写法,你也应该使用它。

  • (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读