当前位置:文档之家› PYTHON文件操作

PYTHON文件操作

一、python文件操作1.import glob目录操作查看目录内容:filelist=glob.glob(‘*.*’)filelist=glob.glob(‘c:\*’)查看指定类型的文件:filelist=glob.glob(‘c:\*.sys’)为了显示一个目录中的全部文件,可以使用如下所示的os.listdir函数:files=os.listdir(r’C:\hpl\scripting\src\py\intro’)#适用于Windowsfiles=os.listdir(’/home/hpl/scripting/src/py/intro’)#适用于Unixfiles=os.listdir("d:\python26")files=os.listdir("c:\\")#跨平台版本:files=os.listdir(os.path.join(os.environ[’scripting’],’src’,’py’,’intro’))files=os.listdir(os.curdir)#当前目录中的所有文件files=glob.glob(’*’)+glob.glob(’.*’)二、测试文件类型我们知道,文件名、目录名和链接名都是用一个字符串作为其标识符的,但是给我们一个标识符,我们该如何确定它所指的到底是常规文件文件名、目录名还是链接名呢?这时,我们可以使用os.path模块提供的isfile函数、isdir函数和islink函数来达成我们的目标,如下所示:print myfile,’是一个’,if os.path.isfile(myfile):print’plain file’if os.path.isdir(myfile):print’directory’if os.path.islink(myfile):print’link’您还可以查找文件的日期及其大小:time_of_last_access=os.path.getatime(myfile)time_of_last_modification=os.path.getmtime(myfile)size=os.path.getsize(myfile)三文件时间time_of_last_access=os.path.getatime(myfile)time_of_last_modification=os.path.getmtime(myfile)size=os.path.getsize(myfile)这里的时间以秒为单位,并且从1970年1月1日开始算起。

为了获取以天为单位的最后访问日期,可以使用下列代码:import time#time.time()返回当前时间age_in_days=(time.time()-time_of_last_access)/(60*60*24)四文件详细信息为了获取文件的详细信息,可以使用os.stat函数和stat模块中的其它实用程序来达到目的,如下:import statmyfile_stat=os.stat(myfile)size=myfile_stat[stat.ST_SIZE]mode=myfile_stat[stat.ST_MODE]if stat.S_ISREG(mode):print’%(myfile)是一个常规文件,大小为%(size)d字节’%\vars()有关stat模块的详细信息,请参见Python Library Reference。

若想测试一个文件的读、写以及执行权限,可以用os.access函数,具体如下所示:if os.access(myfile,os.W_OK):print myfile,’具有写权限’if os.access(myfile,os.R_OK|os.W_OK|os.X_OK):print myfile,’具有读、写以及执行权限’像上面这样的测试代码,对CGI脚本来说非常有用。

五、文件和目录的删除若要删除单个文件的话,可以使用os.remove函数,例如:os.remove(’mydata.dat’)。

Os.remove的别名是os.unlink,不过后者跟传统的UNIX操作系统以及Perl中清除文件的函数重名。

我们可以使用下列方式来删除一组文件,如所有以.jpg以及*.gif为扩展名的文件:for file in glob.glob(’*.jpg’)+glob.glob(’*.gif’):os.remove(file)大家知道,只有当目录中内容已经被清空的时候,我们才可以使用rmdir命令来删除该目录。

不过,我们经常想要删除一个含有许多文件的目录树,这时我们可以使用shutil模块提供的rmtree函数,如下所示:shutil.rmtree(’mydir’)它相当于UNIX操作系统中的命令rm-rf mydir。

我们可以建立一个自定义函数,使其在进行删除操作的时候将文件和目录做同等对待,其典型用法如下所示:remove(’my.dat’)#删除当个文件my.datremove(’mytree’)#删除单个目录树mytree#通过字符串列表中的名称来删除多个文件/目录树:remove(glob.glob(’*.tmp’)+glob.glob(’*.temp’))remove([’my.dat’,’mydir’,’yourdir’]+glob.glob(’*.data’))#-*-coding:UTF-8-*-六、文件的复制与重命名当我们要复制文件的时候,可以使用shutil模块:import shutilshutil.copy(myfile,tmpfile)#拷贝最后访问时间和最后修改时间:shutil.copy2(myfile,tmpfile)#拷贝一个目录树:shutil.copytree(root_of_tree,destination_dir,True)Copytree的第三个参数规定对符号链接的处理,其中True表示保留符号链接;而False 则意味着使用文件的物理副本替代符号链接。

Python语言能够很好地支持路径名的跨平台组成:Os.path.join能使用正确的分界符(在UNIX和Mac OS X操作系统中使用/,在Windows上使用\)来联接目录和文件名,变量os.curdir和os.pardir分别表示当前工作目录及其父目录。

像下面的UNIX操作系统命令cp../../f1.c.可以使用Python语言提供一个跨平台的实现:shutil.copy(os.path.join(os.pardir,os.pardir,’f1.c’),os.curdir)Os模块中的rename函数通常被用于重命名一个文件:os.rename(myfile,’tmp.1’)#将myfile重命名为’tmp.1’这个函数也可用来在相同的文件系统之内移动文件。

这里,我们将myfile移动到目录d 下面:os.rename(myfile,os.path.join(d,myfile))在跨文件系统移动文件的时候,可以先使用shutil.copy2来复制文件,然后再删除原来的副本即可,如下:shutil.copy2(myfile,os.path.join(d,myfile))os.remove(myfile)后面这种移动文件的方法是最安全的。

copymode(sor,sten)七、分解路径名假设我们使用变量fname来存放一个包含完整路径的文件名,例如:/usr/home/hpl/scripting/python/intro/hw.py有时候,我们需要将这样的文件路径拆分为基本名称hw.py和目录名/usr/home/hpl/scripting/python/intro。

在Python语言中,可以使用下列代码达到目的:basename=os.path.basename(fname)dirname=os.path.dirname(fname)#或dirname,basename=os.path.split(fname)扩展名是通过os.path.splitext函数提取出来的,root,extension=os.path.splitext(fname)这样,fname中的扩展名部分即.py被赋给变量extension,而其余部分则赋给了变量root。

如果想得到不带点号的扩展名的话,只需使用os.path.splitext(fname)[1][1:]即可。

假设一个文件名为f,其扩展名随意,若想将其扩展名改为ext,可以使用下面的代码:newfile=os.path.splitext(f)[0]+ext下面是一个具体的示例:>>>f=’/some/path/case2.data_source’>>>moviefile=os.path.basename(os.path.splitext(f)[0]+’.mpg’)>>>moviefile’case2.mpg’八、目录的创建和移动Os模块中的函数mkdir可以用来创建目录,而chdir函数则可以移动目录,如下:origdir=os.getcwd()#将当前位置记下来newdir=os.path.join(os.pardir,’mynewdir’)if not os.path.isdir(newdir):os.mkdir(newdir)#或者os.mkdir(newdir,’0755’)os.chdir(newdir)…os.chdir(origdir)#返回原目录os.chdir(os.environ[’HOME’])#移到主目录假设我们想要在自己的主目录下创建一个新目录py/src/test1,但是目前py、src和test1都不存在。

如果使用mkdir命令来创建的话,需要使用三次才能建好这个嵌套的目录,但是使用Python语言提供的os.makedirs命令的话,则无需这样麻烦了,该命令可以一次建好整个目录:os.makedirs(os.path.join(os.environ[’HOME’],’py’,’src’,’test1’))九、遍历目录树下面的函数调用os.path.walk(root,myfunc,arg)将遍历root目录树;然后,对每个目录名dirname分别调用myfunc(arg,dirname,files)即可,这里参数files是dir中的文件名列表(可通过调用os.listdir(dirname)来获得);arg是用户从调用代码中传递来的参数。

对于UNIX操作系统用户来说,Python语言中跨平台的os.path.walk相当于Unix命令find。

相关主题