perl文件操作
Perl 文件操作
Perl 使用一种叫做文件句柄类型的变量来操作文件。
从文件读取或者写入数据需要使用文件句柄。
文件句柄(file handle)是一个I/O连接的名称。
Perl提供了三种文件句柄:STDIN,STDOUT,STDERR,分别代表标准输入、标准输出和标准出错输出。
Perl 中打开文件可以使用以下方式:
open FILEHANDLE, EXPR
open FILEHANDLE
sysopen FILEHANDLE, FILENAME, MODE, PERMS
sysopen FILEHANDLE, FILENAME, MODE
参数说明:
- FILEHANDLE:文件句柄,用于存放一个文件唯一标识符。
- EXPR:文件名及文件访问类型组成的表达式。
- MODE:文件访问类型。
- PERMS:访问权限位(permission bits)。
下表列出了不同的访问模式:
| 模式 | 描述 |
|---|---|
| < 或 r | 只读方式打开,将文件指针指向文件头。 |
| > 或 w | 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
| >> 或 a | 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
| +< 或 r+ | 读写方式打开,将文件指针指向文件头。 |
| +> 或 w+ | 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
| +>> 或 a+ | 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
open函数
#!usr/bin/perl -W use strict;
use Spreadsheet::ParseExcel; use utf8;
#引入utf8模块 脚本内的字符串使用utf8作为编码格式
binmode(STDOUT,":encoding(gbk)");
#标准输出使用gbk作为编码格式,也可以把gbk改为gb2312
binmode(STDIN,":encoding(gbk)");
#如果涉及到输入流,例如读文件,不加这条读中文文件会出现乱码
binmode(STDERR,":encoding(gbk)");
#如果异常错误中的字符串有中文,请加上STDERR,否则也会出现乱码 #以写的方式打开文件,如果没有该文件,尝试创建该文件,如果文件存在,那么文件内容被清空
if(open(data, ">test1.txt"))
{
print "以写的方式打开文件成功\n";
#写入数据到txt文件中
print data "写入数据到test1中\n";
close(data);
}
else
{
die "test1.txt 文件无法打开, $!\n"; #没有该文件,提示:can't open perl script "operation.pl": no such file or directory
} #以读的方式打开文件,如果没有该文件,不会创建该文件
if(open(data, "<test2.txt"))
{
print "以读的方式打开文件成功\n";
#逐行读取文件数据,通过文件句柄操作符
while(<data>)
{
print "$_";
}
#使用完后要关闭文件
close(data) || die "无法关闭文件";
}
else
{
die "test2.txt 文件无法打开, $!\n"; #没有该文件,提示:can't open perl script "operation.pl": no such file or directory
} #读写方式打开文件,如果没有该文件,就会创建该文件,如果文件存在,文件内容会被清空
if(open(data, "+>test3.txt"))
{
print "以读写的方式打开文件成功\n";
#使用完后要关闭文件
close(data) || die "无法关闭文件";
}
else
{
die "test3.txt 文件无法打开, $!\n"; #没有该文件,提示:can't open perl script "operation.pl": no such file or directory
} #读写方式打开文件,如果文件不存在,不会被创建。如果文件已经存在,原来的数据不会被清除。
if(open(data, "+<test4.txt"))
{
print "以读写的方式打开文件成功\n"; #
#使用完后要关闭文件
close(data) || die "无法关闭文件";
}
else
{
die "test4.txt 文件无法打开, $!\n"; #没有该文件,提示:can't open perl script "operation.pl": no such file or directory
} #如果要向文件追加数据,则在追加数据之前只需要以追加的方式打开文件,文件内容不会被清空,而是向尾部追加数据,文件不存在就会被创建
if(open(data,">>test5.txt"))
{
print "以追加的方式打开文件成功\n";
#使用完后要关闭文件
close(data) || die "无法关闭文件";
}
else
{
die "test5.txt 文件无法打开, $!\n"; #没有该文件,提示:can't open perl script "operation.pl": no such file or directory
} #如果需要读取追加的文件,文件不存在就会被创建
if(open(data,"+>>test6.txt"))
{
print "以读取追加文件的方式打开文件成功\n";
#追加内容到文件中
print data "追加内容到test5中";
#使用完后要关闭文件
close(data) || die "无法关闭文件";
}
else
{
die "test6.txt 文件无法打开, $!\n"; #没有该文件,提示:can't open perl script "operation.pl": no such file or directory
}
sysopen函数
类似于 open 函数,只是它们的参数形式不一样。
以下实例是以读写(+<filename)的方式打开文件:
sysopen(DATA, "file.txt", O_RDWR);
如果需要在更新文件前清空文件,则写法如下:
sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );
你可以使用 O_CREAT 来创建一个新的文件, O_WRONLY 为只写模式, O_RDONLY 为只读模式。
The PERMS 参数为八进制属性值,表示文件创建后的权限,默认为 0x666。
下表列出了可能的模式值:
| 模式 | 描述 |
|---|---|
| O_RDWR | 读写方式打开,将文件指针指向文件头。 |
| O_RDONLY | 只读方式打开,将文件指针指向文件头。 |
| O_WRONLY | 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
| O_CREAT | 创建文件 |
| O_APPEND | 追加文件 |
| O_TRUNC | 将文件大小截为零 |
| O_EXCL | 如果使用O_CREAT时文件存在,就返回错误信息,它可以测试文件是否存在 |
| O_NONBLOCK | 非阻塞I/O使我们的操作要么成功,要么立即返回错误,不被阻塞。 |
getc 函数
getc 函数从指定的 FILEHANDLE 返回单一的字符(还有就是用于键盘输入一个字符),如果没指定返回 STDIN:
#以读的方式打开文件,如果没有该文件,不会创建该文件
if(open(data, "<test2.txt"))
{
print "以读的方式打开文件成功\n";
#从键盘返回一个字符
my $key = getc(STDIN);
print "Entered value is $key\n";
#使用完后要关闭文件
close(data) || die "无法关闭文件";
}
输出结果为
D:\>perl FileOperation.pl
以读的方式打开文件成功
4
Entered value is 4
read 函数
read 函数用于从缓冲区的文件句柄读取信息。
这个函数用于从文件读取二进制数据。
read FILEHANDLE, SCALAR, LENGTH, OFFSET
read FILEHANDLE, SCALAR, LENGTH
参数说明:
- FILEHANDLE:文件句柄,用于存放一个文件唯一标识符。
- SCALAR:存贮结果,如果没有指定OFFSET,数据将放在SCALAR的开头。否则数据放在SCALAR中的OFFSET字节之后。
- LENGTH:读取的内容长度。
- OFFSET:偏移量。
如果读取成功返回读取的字节数,如果在文件结尾返回 0,如果发生错误返回 undef。
if(open(data, "<test2.txt"))
{
print "以读的方式打开文件成功\n";
my $SCALAR;
read(data, $SCALAR, 2, 0);#读取的数据保存在SCALAR中,读取的长度为2
print "$SCALAR";
#使用完后要关闭文件
close(data) || die "无法关闭文件";
}
拷贝文件
以下代码将test1的文件内容拷贝到test2中去
#!/usr/bin/perl # 只读方式打开文件
open(data1, "<test1.txt"); # 打开新文件并写入
open(data2, ">test2.txt"); # 拷贝数据
while(<data1>)
{
print data2 $_;
}
print "拷贝数据成功\n";
close( data1 );
close( data2 );
文件重命名
将test1.txt重命名为test1_Rename.txt
#文件重命名
rename("D:/test1.txt","D:/test1_Rename.txt");
删除文件
#删除文件
unlink("D:/test1_Rename.txt");
tell 函数
tell 函数用于获取文件位置:如果指定 FILEHANDLE 该函数返回文件指针的位置,以字节计。如果没有指定则返回默认选取的文件句柄。
if(open(data1, "+<test1.txt"))
{
my $position=tell data1;
print "position:$position";#输出文件指针的位置0
close data1;
}
perl文件操作的更多相关文章
- 分享:perl 文件操作总结
发布:thebaby 来源:net [大 中 小] perl 文件操作,包括打开.关闭文件,读取.定入文件等.原文链接:http://www.jbxue.com/article/3153.html 打 ...
- [Perl][文件操作]判断文件是否为符号链接(Unicode路径)
Win32API::File 判断文件/文件夹是否为符号链接 Win32::Unicode 好像无法做这方面的判断,只能判断是否为目录.文件.文件是否存在. Win32API::File 则支持 Ge ...
- 16-Perl 文件操作
1.Perl 文件操作Perl 使用一种叫做文件句柄类型的变量来操作文件.从文件读取或者写入数据到文件需要使用文件句柄.文件句柄(file handle)是一个I/O连接的名称.Perl提供了三种文件 ...
- 文件操作mode学习总结-----Python学习总结【第四篇】:Python之文件操作(文件、正则、json、pickle)
非常全的博客,防丢链接参考https://www.cnblogs.com/madsnotes/articles/5521551.html 1.文件操作 1.1 操作流程 1)文件打开 2)文件操作 3 ...
- dos命令:文件操作
文件操作 一.assoc命令 1.介绍 显示或修改文件扩展名关联 2.语法 ASSOC [.ext[=[fileType]]] .ext 指定跟文件类型关联的文件扩展名 fileType 指定 ...
- Python 小程序,对文件操作及其它
以下是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比方说,从文件里读取一行数据.分别存放于列表中,再对列表进行操作.如去掉里面的反复项.排序等操作. 常见对文件里行 ...
- Linux中gz文件操作遇到的一些技巧和坑
目录 不解压情况下获取gz超大文件的前/后几行? Perl读入gz文件操作? 不能直接通过wc -l 来统计gz文件的行数 前提是gz文件超大,如上百G,肯定不能直接解压来做. 不解压情况下获取gz超 ...
- 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
.net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...
- 野路子出身PowerShell 文件操作实用功能
本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...
随机推荐
- Spring5事务管理
事务管理是什么? 相当于过滤器,如果这一进程中上一个操作正常执行完后提交数据已经发生改变,但是下一个操作中出现了异常,这样就会影响数据的查看. 典型例子:银行转账,甲方已经转钱给乙方(甲方已扣钱),乙 ...
- Hack The Box( Starting Point )
Hack The Box [Starting Point] 初始点 -- 了解渗透测试的基础知识. 这一章节对于一个渗透小白来说,可以快速的成长.以下将提供详细的解题思路,与实操步骤. TIER 0 ...
- Html飞机大战(八):子弹的移动和管理
好家伙,这应该是这个小游戏最难的几个点之一了 现在我们要做出子弹射击的效果我们应该如何处理? 1.首先我们要确定几个变量和方法的关系 变量: 子弹 bullet 弹夹(用来装子弹的东西)bulle ...
- 基于Vue的前端UI组件库的比对和选型
大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 由于录制视频的需要,要做前端UI组件库的选型.平时国内外也见了不少基于Vue的UI ...
- 用Python实现广度优先搜索
图是一种善于处理关系型数据的数据结构,使用它可以很轻松地表示数据之间是如何关联的 图的实现形式有很多,最简单的方法之一就是用散列表 背景 图有两种经典的遍历方式:广度优先搜索和深度优先搜索.两者是相似 ...
- Kingbase V8R6集群安装部署案例---脚本在线一键缩容
案例说明: KingbaseES V8R6支持图形化方式在线缩容,但是在一些生产环境,在服务器不支持图形化界面的情况下 ,只能通过脚本命令行的方式执行集群的部署或在线缩容. Tips: Kingb ...
- 【Android 逆向】ARM while 逆向
#include <stdio.h> int dowhile(int n){ int i = 1; int s = 0; do{ s += i; }while(i++ < n); r ...
- 干货分享!JAVA诊断工具Arthas在Rainbond上实践~
别再担心线上 Java 业务出问题怎么办了,Arthas 帮助你解决以下常见问题: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(下)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 跟羽夏学 Ghidra ——导航
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...