[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/python
import strcut
f=open('file.bit','wb')
n=100
w=True
x=392.0
str=struct.pack('if?',b,x,w)
f.write(str)
f.close()
(2).使用pickle模块
!/bin/python
import pickle
f=open('file.bit','wb')
n=100
w=True
x=392.0
pickle.dump(n,f)
pickle.dump(w,f)
pickle.dump(x,f)
f.close()

读取
二进制文件的读取就是写入的逆过程
(1).读取字节串,使用函数将其还原成数据,使用struct模块中的unpack()方法,返回一个元组
方法:unpack(格式传,字节表)

!/bin/python
import struct
f=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/python
import os
def 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/python
import os
def 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函数等。

猜你喜欢

转载自blog.csdn.net/kairui123/article/details/78960612
今日推荐