文件
文件是数据在外部介质上的数据的集合,对于文件在Linux系统上包括普通文件,目录文件,二进制文件,设备文件等。
文件的打开或者创建
方法:open(‘file_name’,’打开方式’[,buf_size])
buf_size:参数指的是文件缓存区的大小,0代表不缓存,1代表缓存,使用系统默认设置的缓存区大小,大于1代表缓存大小。
打开方式:如下表
| 打开方式 | 说明 |
|---|---|
| ‘r’ | 只读的方式打开文件,若文件不存在,则产生异常 |
| ‘r+’ | 以读写的方式方式打开文件,不删除原内容,若文件不存在,产生异常 |
| ‘w’ | 只写的方式打开文件,删除原内容,无文件则创建 |
| ‘w+’ | 读写的方式发开文件,删除原内容,无文件则创建 |
| ‘a’ | 以追加的方式打开一个文件,不删除原内容,在文件末尾追加数据,无文件则创建 |
| ‘a+’ | 以读写的方式打开文件,不删除原内容,在末尾写数据,无文件则创建 |
| ‘rb’ | 同’r’,打开二进制文件 |
| ‘rb+’ | 同’r+’,打开二进制文件 |
| ‘wb’ | 同’w’,打开二进制文件 |
| ‘wb+’ | 同’w+’,打开二进制文件 |
| ‘ab’ | 同’a’,打开二进制文件 |
| ‘ab+’ | 同’a+’,打开二进制文件 |
普通文件的读写
读取:
read([num])
若num不写时,读取整个文件的内容,num>0时读取num大小字节的数
readline():读取文件的一行
readlines():读取文件的每一行
例如:
(1).使用read()!/bin/pythonf=open('file.txtx','r')s=f.read()f.close()print(s)(2).使用readline读取一行读完整个文件!/bin/pythonf=open('file.txtx','r')whil True: //读完整个文件 s=f.readline() //读取一行 if s=='': break print sf.close(3).使用readlines()读取文件的每一行,读完整个文件!/bin/pythonf=open('file.txtx','r')s=f.readlines() //读取后形成一个元组for line in s: print line,f.close()写入:
write(str)
二进制文件的读取和写入
写去:
对于二进制文件,是无法将数字,bool类型的数据写入到二进制文件中。
(1).使用struct模块中的pack()方法将数字和bool型转化为字节串,然后使用write方法写入到二进制文件中。
方法:pack(‘格式传’,格式对象)
(2).使用pickle模块中的dump方法直接将对象转化为字节串并写入到二进制文件中。
方法:dump(格式obj,f)
例如:
(1).使用struct模块 !/bin/pythonimport strcutf=open('file.bit','wb')n=100w=Truex=392.0str=struct.pack('if?',b,x,w)f.write(str)f.close()(2).使用pickle模块!/bin/pythonimport picklef=open('file.bit','wb')n=100w=Truex=392.0pickle.dump(n,f)pickle.dump(w,f)pickle.dump(x,f)f.close()读取:
二进制文件的读取就是写入的逆过程
(1).读取字节串,使用函数将其还原成数据,使用struct模块中的unpack()方法,返回一个元组
方法:unpack(格式传,字节表)
!/bin/pythonimport structf=open('file.bit','rb')str=f.read(3)tu=struct.unpack('if?',str) //返回一个元组print tuf.close()(2).使用pickle模块中load方法直接读取并还原成原有数据,返回还原后的对象
方法:load(f)
!/bin/pythonimport picklef=open('file.bit','rb')n=pickle.load(f) #读出文件的数据个数while i文件对象的|常用方法
方法名 说明 flush() 把缓存区的内容写入文件 close() 把缓存取得内容写入文件,并关闭文件释放对象 seek(offset[,whence]) 文件指针移动 tell() 返回文件指针当前位置
常用的文件操作函数
对于文件的操作,python提供了os模块和os.path模块的函数
(1).os模块
函数名 说明 access(path) 根据mode指定的权限访问文件 chmod() 修改文件的访问权限 remove(path) 删除path指定的文件 rename(src,dst) 重命名 stat(path) 返回指定文件的属性 fstat(path) 返回打开文件的所有属性 listpath(path) 返回path目录下的文件和目录
(2).os.path模块
函数名 说明 abspath(path) 返回path的绝对路径 dirname(path) 返回目录的路径 exists(path) 文件是否存在 getsize(file_name) 返回文件的大小 isabs(path) 是否为绝对路径 isdir(path) 是否为目录 isfile(path) 是否为文件 splitext(p) 从路径中分割出扩展名 splitdrive(p) 从路径中分割出驱动器的名称 walk(path) 遍历目录数
目录目录的创建
(1).创建单个目录
方法:mkdir(path)
(2).创建多级目录
方法:makedirs(path1/path2/….)
目录的删除
(1).删除一个目录
方法:rmdir(path)
(2).删除多级目录
方法:removedirs(path1/path2/….)
目录的遍历
对于目录的遍历,在上述文件的操作方法中有一个listdir(path)方法,此方法只能列出path目录下的目录和文件,但是不能列出子目录下的文件和目录。
(1).使用listdir函数进行递归
!/bin/pythonimport osdef dir_view(path): list_dir=os.listdir(path) for dir in list_dir: sub_path=os.path.join(path,dir) #获取完整路径 if os.path.isdir(sub_path): dir_view(path)
(2).使用os模块的walk方法,返回一个元组
!/bin/pythonimport osdef view_dir(path): list_dir=os.walk(path) #返回一个元组,包括3个元素,所有路径名,所有目录列表,文件列表 for root,dirs,files in list_dir: for d in dirs: print os.path.join(root,d) #获取完整路径 for f ini files: print os.path.join(root,f) #获取文件完整路径
python对于文件的操作比较简单,不像c那样比较复杂,对于同一个操作有几个不同的函数,例如对于文件的打开,C语言中有open函数,fopen函数等。


![[Python]学习基础篇:文件和目录 [Python]学习基础篇:文件和目录](http://www.mshxw.com/aiimages/31/224708.png)
