首页 > 代码库 > python学习之-文件和对象
python学习之-文件和对象
文件和对象
文件对象不仅可以用来访问普通的磁盘文件,还能够来访问普通的磁盘文件,也可以访问任何其他类型抽象层面的“文件”。内建函数 open() 返回一个文件对象,对该文件进行后续相关的操作都要用到它。
文件内建函数 open() 以及 file() 提供了初始化输入/输出(I/O)操作的通用接口。open() 内建函数成功打开文件后会返回一个文件对象,否则引发一个错误。当操作失败,会产生一个IOERROR异常。内建函数 open() 的基本语法:
file_object = open(file_name, access_mode=‘r‘,buffering= -1)
file_name 是包含要打开的文件名字的字符串,它可以是相对路径或者是绝对路径。
下面举例说明:
1 2 3 4 | fp = open ( ‘/etc/motd‘ ) fp = open ( ‘test.txt‘ , ‘w‘ ) fp = open ( ‘data‘ , ‘r+‘ ) fp = open (r ‘c: \io.sys‘ , ‘rb‘ ) |
工厂函数 file()
open() file()函数具有相同的功能,可以任意替换。凡是可以使用 open() 的地方,都可以用 file() 来替换
文件内建方法
open() 成功执行并返回一个文件对象之后,所有对该文件的后续操作都将通过合格“句柄”进行。文件方法可以分为四类:输入输出,文件内移及杂项。
输入
read()方法用来直接读取字节到字符串中,最多读取给定数目个字节。如果没有给定 size参数(默认值为-1)或者 size 值为负,文件将被读取直至末尾。
readline() 方法并不像其他两个输入方法一样返回一个字符串。它会读取所有(剩余的)行然后把它们作为一个字符串列表返回。它的可选参数sizhint代表返回的最大字节大小。如果大于0,那么返回的所有行应该大约有sizhint 字节(可能稍微大于这个数字,因为需要凑齐缓冲区大小)
输出
write() 内建方法的功能与 read() 和 readline() 相反。它把含有文本数据或二进制数据库的字符串写入文件中去。
和readlines()一样,writelines() 方法是针对列表的操作,它接受一个字符串列表作为参数,将它们写入文件。行结束符并不会自动加入,所以如果需要的话,你必须在调用 writelines() 前给每行结尾加上结束符
文件内移动
seek() 方法可以在文件中一定文件指针到不同的位置。offset 字节代表相对于某个位置偏移量。位置的默认值为 0 ,代表从开头算起
文件迭代
一行一行访问文件很简单
for eachLegen in f:
:
在这个循环里面,eachLine代表文本文件的一行,可以用来做任何想做的事情。
close() 通过关闭文件来结束对它的访问。python垃圾收集机制也会在文件对象的引用计数降至零的时候自动关闭文件。
os 模块属性 描述
linesep 用于在文件中分隔行的字符串
sep 用来分隔文件路径名的字符串
pathsep 用于分割文件路径的字符串
curdir 当前工作目录的字符串名称
pardir 父目录字符串名称
命令行参数
sys模块通过 sys.argv 属性提供了对命令行参数的访问。命令行参数是调用某个程序时除程序名以外的其他参数。在python中,argv 变量代表一个从命令行上输入的各个参数组成的字符串数组;argc变量代表输入的参数个数。argc其实是sysargv列表的长度,而该列表的第一项sys.argv[0]永远是程序的名称
总结如下:
sys.argv 是命令行参数 的列表
len (sys.argv)是命令行参数的个数(也就是argc)
下面来个举例
1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@pydb python] # cat e.py import sys print ‘you entered‘ , len (sys.argv), ‘arguments...‘ print ‘they were: ‘ , str (sys.argv) [root@pydb python] # python e.py 76 tables 85 hawk you entered 5 arguments... they were: [ ‘e.py‘ , ‘76‘ , ‘tables‘ , ‘85‘ , ‘hawk‘ ] [root@pydb python] # python e.py 34 python table sum you entered 5 arguments... they were: [ ‘e.py‘ , ‘34‘ , ‘python‘ , ‘table‘ , ‘sum‘ ] [root@pydb python] # python e.py abc def you entered 3 arguments... they were: [ ‘e.py‘ , ‘abc‘ , ‘def‘ ] |
文件系统
对文件系统的访问大多通过python的os模块实现。该模块是python访问操作系统的主要接口。os模块实际上只是真正加载的模块的前端,而真正的那个“模块”明显要依赖与具体的操作系统。
除了对进程和进程运行环境进行管理外,os 模块还负责处理大部分的文件系统操作,应用程序开发人员可能要经常用到这些。包括删除/重命名文件,遍历目录树,以及管理文件访问权限等。
os.path 模块可以完成一些正对路径名的的操作,它提供的函数可以完成管理和操作文件路径名中的各个部分,获取文件或子目录信息,文件路径查询等操作。
这两个模块提供了与平台和操作系统无关的统一文件系统访问方法
os模块的文件/目录访问函数
函数 描述
文件处理 | 这里的上标 a b c是表示版本号跟程序本身无关
mkfifo()/mknod()^a 创建命名管道/创建文件系统节点
remove()/unlink() 删除文件
rename()/renames()^b 重命名文件
*stat^c() 返回文件信息
symlink() 创建符号链接
utime() 更新时间戳
tmpfile() 创建并打开(‘w+b‘) 一个新的临时文件
walk() 生成一个目录树下的所有文件名
目录/文件夹
chdir/fchdir() 改变当前工作目录/通过一个文件描述符改变当前工作目录
chroot() 改变当前进程根目录
getcwd()/getcwdu() 返回当前工作目录/功能相同,但返回一个Unicode对象
mkdir()/makedirs() 创建目录/创建多层目录
rmdir/removedirs() 删除目录/删除多层目录
访问/权限
access() 检验权限模式
chmod() 改变权限模式
chown()/lchown 改变owner和group ID/功能相同,但不会跟踪链接
umask() 设置默认权限
文件描述符操作
open() 底层的操作系统 open(对于文件,使用标准的内建 open() 函数)
read()/write() 根据文件描述符读取/写入数据
dup()/dup2() 复制文件描述符号/功能相同,但是是复制到另一个文件描述符
设备号
makedev() 从major和minor设备号创建一个原始设备号
major()/minor() 从原始设备号获得 major/minor 设备号
os.path 模块中的路径名访问函数
函数 描述
basename() 去掉目录路径,返回文件名
dirname() 去掉文件名,返回目录路径
join() 将分割的各部分组合成一个路径名
split() 返回(dirname(),BASENAME()) 元组
splitdrive() 返回(drivename,pathname) 元组
splitext() 返回 (filename, extension) 元组
信息
getatime() 返回最近访问时间
getctime() 返回文件创建时间
getmtime() 返回最近文件修改时间
getsize() 返回文件大小(以字节为单位)
查询
exists() 指定路径(文件或目录)是否存在
isabs() 指定路径是否为绝对路径
isdir() 指定路径是否存在且为一个目录
isfile() 指定路径是否存在且为一个文件
islink() 指定路径是否存在且为一个符号链接
ismount() 指定路径是否存在且为一个挂载点
samefile() 两个路径名是否指向同一个文件
是笔记吗?是流水帐吗?
很多年前,一直鄙视那些做笔记发出来分享的同学。现在后悔了,感觉很多优秀的文章,写着原创,被评为优秀,只要你用心去发现,很有可能是某本书上记录下来的笔记,那么这里我想说。记笔记本身不存在问题。是一种好习惯,有些时候记录下来有自己的感受和想法,那么是再好不过的了
这是我学习 python核心编程2 的读书笔记,以后还会写,以前在其他地方写的,以后搬到园子里了。希望更多志同道合的朋友一起分享技术和学习过程,让我能学到更多的思想。代码是写出来的,不是看出来的。思想是交流出来的,不是冥思苦想出来的。