一、文件系统

从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

Python对文件系统的操作是通过os模块实现。提供了访问操作系统功能的接口,但是这个os模块只是一个伪文件系统操作,真正的“模块”如,dos,os2等,这些是直接的底层工作,而Python的os模块只是一种借用操作(个人理解)

os.path模块可对路径进行相关操作。

os、os.path这两个模块与平台、操作系统无关。

 二、os模块的文件/目录访问函数

函数

描述

文件处理

 

mkfifo()/mknod()

创建命名管道/创建文件系统节点

remove(path)/unlink(path)

删除文件 如:os.remove('d:\\b.png')

rename(old, new)/renames(old, new)

 重命名文件:如:os.rename('d:\\b.png','d:\\a.png')

stat(path)

 返回文件信息:


>>> os.stat('d:\\a.png')
(33206, 0L, 0, 0, 0, 0, 4088L, 1372746141, 1372734171, 1372746141)
>>>


symlink()

 创建符号链接

utime()  

更新时间戳

tmpfile()

 创建并打开('w+b')一个新的临时文件,注意不含参数,一旦执行则创建一个临时文件,类型未知


>>> os.tmpfile()#创建临时文件
<open file '<tmpfile>', mode 'w+b' at 0x011D4BF0> >>> os.rename('d:\\t58g.2','d:\\abc.txt')#改成txt


walk(top, topdown, onerror)

 生成一个目录树下所有文件名

目录/文件夹

 

chdir(path)

 改变当前工作目录

listdir(path)

 列出指定目录文件


>>> os.listdir('d:\\')
['a.png', 'abc.txt', 'out.txt', 'Program Files', 'Python25', 'RECYCLER',]>>>


getcwd()/getcwdu()

 返回当前目录:


>>> os.getcwd()
'D:\\Python25'
>>> os.getcwdu()
u'D:\\Python25


mkdir(path)/makedirs(name, mode)

创建目录/创建多层目录


>>> os.mkdir('D:\\file')



文件管理软件python开发 文件管理系统python_文件管理软件python开发

rmdir(path)/removedirs(name)

 删除目录/删除多层目录

访问/权限

 

access(path, mode)

 验证权限目录

chmod(path, mode)

 更改权限模式

文件描述符操作

 

open()、read()、write()

 见上一节

dup()/dup2()

 复制

 其他的见《Python 核心编程2》9.7节

应用:

(1):检查下磁盘中(D)是否有文件"BeginMan"的文件夹,如果存在则新建"SuperMan",
            在该目录下创建一个名为"readme.txt"的文本文件,写入数据,然后输出文件内容
(2):如果文件夹BeginMan存在,则遍历该目录,并输入目录文件,
            如果该目录下存在文件,且如果有文件名为b.png,则重命名为boy.png,移到D盘根目录下
  (3):删除BeginMan目录下所有文件,只保留子目录

文件系统图如下:

文件管理软件python开发 文件管理系统python_文件名_02

D盘中并没有SuperMan的文件夹,这里程序如下:



#coding=utf-8
import os,shutil
import datetime DIR = 'D:\\' FILENAME = 'BeginMan' PATH = 'D:\\%s' %FILENAME CONTENT = """ (1):检查下磁盘中(D)是否有文件"BeginMan"的文件夹,如果存在则新建"SuperMan",\n 在该目录下创建一个名为"readme.txt"的文本文件,写入数据,然后输出文件内容\n (2):如果文件夹BeginMan存在,则遍历该目录,并输入目录文件\n, 如果该目录下存在文件,且如果有文件名为b.png,则重命名为boy.png,移到D盘根目录下\n (3):删除BeginMan目录下所有文件,只保留子目录 ==============================================\n 时间:%s\n 作者:%s\n """ %(datetime.datetime.now(),FILENAME) if FILENAME in os.listdir(DIR): print u'已经有同名文件:%s' %FILENAME for obj in os.listdir(PATH): print u'%s\\%s\n' %(PATH,obj) try: if os.path.isfile(u'%s\\%s' %(PATH,obj)): if obj == 'b.png': #如果含有文件为b.png,则重命名为boy.png,移动到该目录上级 os.rename(u'%s\\%s' %(PATH,obj),u'%s\\%s' %(PATH,'boy.png')) shutil.move(u'%s\\%s' %(PATH,'boy.png'), 'D:\\') os.remove(u'%s\\%s' %(PATH,obj))#删除文件,只保留子目录 except Exception,e: print 'The error:%s' %e FILENAME = 'SuperMan' os.mkdir('D:\\%s' %FILENAME) #创建目录 f = open('D:\\%s\\readme.txt'%FILENAME,'w' ) #在该目录下创建文件 f.write(CONTENT) #写入数据  f.close() f = open('D:\\%s\\readme.txt'%FILENAME,'r' ) print [lines.strip() for lines in f] #输出



运行如下:

文件管理软件python开发 文件管理系统python_操作系统_03

效果如下:

文件管理软件python开发 文件管理系统python_文件名_04

文件管理软件python开发 文件管理系统python_操作系统_05

文件管理软件python开发 文件管理系统python_文件系统_06

Python有关文件、文件夹操作小结:

import os,shutil  #要用到这两个模块
 
创建文件:
1 ) os.mknod( "test.txt" ) 创建空文件
2 ) open ( "test.txt" ,w)           直接打开一个文件,如果文件不存在则创建文件
 
创建目录:
os.mkdir( "file" )                   创建目录
 
复制文件:
shutil.copyfile( "oldfile" , "newfile" )       oldfile和newfile都只能是文件
shutil.copy( "oldfile" , "newfile" )            oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
 
复制文件夹:
shutil.copytree( "olddir" , "newdir" )        olddir和newdir都只能是目录,且newdir必须不存在
 
重命名文件(目录)
os.rename( "oldname" , "newname" )       文件或目录都是使用这条命令
 
移动文件(目录)
shutil.move( "oldpos" , "newpos" )  
 
删除文件
os.remove( "file" )
 
删除目录
os.rmdir( "dir" ) 只能删除空目录
shutil.rmtree( "dir" )    空目录、有内容的目录都可以删
 
转换目录
os.chdir( "path" )    换路径
 
判断目标
os.path.exists( "goal" )    判断目标是否存在
os.path.isdir( "goal" )     判断目标是否目录
os.path.isfile( "goal" )    判断目标是否文件 



 

 三、os.path

如下表:

 函数

描述

分隔

 

basename(p)

去掉目录路径, 返回文件名:




os.path.basename('D:\\Project\\python25\\Lib\\a.txt') #a.txt


dirname(p)

去掉文件名, 返回目录路径:




os.path.dirname(D:\\Project\\python25\\Lib\\a.txt)
#D:\Project\python25\Lib


join()

将分离的各部分组合成一个路径名:Django项目中常用,




settings.py
DIRNAME = os.path.dirname(__file__)
TEMPLATE_DIRS = (
     os.path.join(DIRNAME, "themes"), )


split()

返回 (dirname(), basename()) 元组:




>>>DIRNAME = 'D:\\Project\\python25\\Lib\\a.txt'
>>>os.path.split(DIRNAME)
('D:\\Project\\python25\\Lib', 'a.txt')


splitdrive()

返回 (drivename, pathname) 元组:




os.path.splitdrive(DIRNAME)
#('D:', '\\Project\\python25\\Lib\\a.txt')


splitext()

返回 (filename, extension) 元组




os.path.splitext(DIRNAME) 
#('D:\\Project\\python25\\Lib\\a', '.txt')


信息

 

 getatime(filename)

返回最近访问时间:




gTime =  os.path.getatime(os.getcwd())
print gTime  #1372836299.77
tTime = time.localtime(gTime)
print time.strftime('%Y-%m-%d %H:%M:%S',tTime) #2013-07-03 15:24:59


getctime(filename)

返回文件创建时间:




cTime = os.path.getctime(os.getcwd())
c_time = time.localtime(cTime)
print time.strftime('%Y-%m-%d %H:%M:%S',c_time) #2013-04-17 17:27:46


getmtime(filename)

返回最近文件修改时间

getsize(filename)

返回文件大小(以字节为单位)

查询

 

exists()

指定路径(文件或目录)是否存在

isabs()

指定路径是否为绝对路径

isdir()

指定路径是否存在且为一个目录

isfile()

指定路径是否存在且为一个文件

islink()

指定路径是否存在且为一个符号链接

ismount()

samefile()

指定路径是否存在且为一个挂载点

两个路径名是否指向同个文件