文件
文件是数据在外部介质上的数据的集合,对于文件在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函数等。