[Python]学习基础篇:文件和目录

文件

文件是数据在外部介质上的数据的集合,对于文件在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/python f=open('file.txtx','r') s=f.read() f.close() print(s) (2).使用readline读取一行读完整个文件 !/bin/python f=open('file.txtx','r') whil True:           //读完整个文件     s=f.readline()    //读取一行     if s=='':         break     print s f.close (3).使用readlines()读取文件的每一行,读完整个文件 !/bin/python f=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 strcut f=open('file.bit','wb') n=100w=Truex=392.0 str=struct.pack('if?',b,x,w) f.write(str) f.close() (2).使用pickle模块 !/bin/pythonimport pickle f=open('file.bit','wb') n=100w=Truex=392.0 pickle.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 tu f.close()

(2).使用pickle模块中load方法直接读取并还原成原有数据,返回还原后的对象 
方法:load(f)

!/bin/python import pickle f=open('file.bit','rb') n=pickle.load(f)      #读出文件的数据个数 while i<n:     x=pickle.load(f)     print x     i++ f.close()
  • 文件对象的|常用方法

方法名 说明
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函数等。

本文转自lnsaneLlinux博客51CTO博客,原文链接http://blog.51cto.com/lnsane784/2057037如需转载请自行联系原作者

Insane_linux
上一篇:银行堪称行业信息化奇葩IT定制苦尽甘来


下一篇:新三板信息安全行业8成公司盈利 昔日杀毒老大沦为倒数