好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

python学习笔记 目录和文件操作

python学习笔记 目录和文件操作

python学习笔记(七)

   目录和文件操作

   语言只有和外部连起来操作才会实现更强大的功能,比如操作文件、数据库等,这样数据可以有一块单独存储的地方,而不是存放在内存中。更强大的是网络编程,当然这些后续都会学习。接下来学习python对目录和文件的操作。前面的笔记都是基础理论知识,我觉得从这里开始几乎就可以干一些事了。

  有关文件夹与文件的查找,删除等功能 在  os  模块中实现。使用时需先导入这个模块:import  os

                             目录

1、取得当前目录——os.getcwd()

>>>  import   os
 >>> s=os.getcwd() #  获得当前运行脚本所在目录 
>>>  s
  '  C:\\Python27  ' 

比如运行test.py,那么输入该命令就会返回脚本所在的文件夹位置。

例如将test.py放入A文件夹。并且希望不管将A文件夹放在硬盘的哪个位置,都可以在A文件夹内生成一个新文件夹。且文件夹的名字根据时间自动生成。

>>>  import   os
 >>>  import   time
 >>> folder = time.strftime(r "  %Y-%m-%d_%H-%M-%S  "  ,time.localtime())
 >>>   os.makedirs  (r '  %s/%s  ' %(os.getcwd(),folder))  #创建  以时间命名文件夹名 

这是运行脚本的目录即 'C:\\Python27' 下多了一个以当前时间命名的文件夹

2、创建子目录——os.makedirs("path"),path是要创建的子目录

>>> os.makedirs( "  C:\\temp\\test  " )  #  这是C盘下就创建了temp目录,temp下嵌套的文件夹是test 

(当然,也可能创建失败,比如path已存在,或者驱动器不在,或者无写权限等等)

3、更改当前目录——os.chdir()

相当于dos或Linux下的cd命令

>>> os.chdir( '  c:\\  ' )   #  将当前目录改为C盘根目录下 

4、将路径分解为目录名和文件名——os.path.split()

格式为:fpath , fname = os.path.split( "要分解的路径")

>>> a,b=os.path.split( "  c:\\dir1\\dir2\\file.txt  "  )
 >>>  print   a
c:\dir1\dir2
 >>>  print   b
file.txt 

5、分解文件名的扩展名——os.path.splitext()

格式为:fpath_name , ftext = os.path.splitext( "要分解的路径")

>>> a,b=os.path.splitext( "  c:\\dir1\\dir2\\file.txt  "  )
 >>>  print   a
c:\dir1\dir2\file
 >>>  print   b
.txt 

6、判断一个路径(目录或文件)是否存在——os.path.exists()

格式为:os.path.exists(“要判断的路径或文件”)

>>> os.path .exists ( "  C:\\  " )  #  该路径存在 
 True
 >>> os.path .exists ( "  C:\\123\\  " )  #  该路径不存在 
 False
 >>> os.path .exists ( "  C:\\123.txt  " )  #  该文件不存在 
 False
 >>> os.path .exists ( "  C:\\test.txt  " )   #  该文件存在 
True

7、判断一个路径是否有需要的文件——os.path.isfile("文件")

>>> os.path .isfile( "  C:\\test.txt  "  )
True
 >>> os.path .isfile( "  C:\\123.txt  "  )
False 

8、判断一个路径是否存在——os.path.isdir("路径")

>>> os.path .isdir( "  C:\\  "  )
True
 >>> os.path .isdir( "  H:\\  "  )
False 

9、获取目录中的文件及子目录的列表——os.listdir("路径")

相当于Windows下powershell中获取Get-ChildItem命令和Linux中的ls命令。但是这个显示不是以常见的列表的形式:

>>> os.listdir( "  C:\\  "  )   #这里包括隐藏文件也显示出来了
[  '  $Recycle.Bin  ' ,  '  360ld  ' ,  '  360rescue  ' ,  '  360SANDBOX  ' ,  '  360SysRt  ' ,  '  Boot  ' ,  '  bootmgr  ' ,  '  BOOTSECT.BAK  ' ,  '  CacheTemp  ' ,  '  Documents and Settings  ' ,  '  grldr  ' ,  '  IFRToolLog.txt  ' ,  '  inetpub  ' ,  '  MSOCache  ' ,  '  pagefile.sys  ' ,  '  Program Files  ' ,  '  Program Files (x86)  ' ,  '  ProgramData  ' ,  '  Python27  ' ,  '  Recovery  ' ,  '  RECYCLER  ' ,  '  SBTDR  ' ,  '  System Volume Information  ' ,  '  test.txt  ' ,  '  Users  ' ,  '  Windows  ' ]

示例:获取指定目录下的所有子目录的列表

View Code

   获取指定目录下所有文件的列表

View Code

10、删除子目录——os.rmdir("path"),只能删除空目录

>>> os.rmdir( "  C:\\temp\\test  " )  #  注意只删除了test目录 
>>> os.rmdir( "  C:\\temp  " )   #  这里才删除了temp目录 

                            文件

  python中模块的引入使得对文件的操作变的很简单。最基本的文件操作就是在文件中进行读写数据,在操作文件之前要打开文件。

打开文件——open('file'[,'mode'])  

>>>import os
>>> os.getcwd() ' c:\\ ' >>> file=open( ' test.txt ' ) # 默认的mode是'r',即读模式 >>> file.read() #读取文件内容 ' hello\nworld\nhello,python ' # \n在文件中的形式是换行

mode的选项即含义如下:

模 式

描述

r

以读方式打开文件,可读取文件信息。

w

以写方式打开文件,可向文件写入信息。如文件存在,则清空该文件,再写入新内容

a

以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建

r+

以读写方式打开文件,可对文件进行读和写操作。

w+

消除文件内容,然后以读写方式打开文件。

a+

以读写方式打开文件,并把文件指针移到文件尾。

b

以二进制模式打开文件,而不是以文本模式。该模式只对Windows或Dos有效,类Unix的文件是用二进制模式进行操作的。

关于文件的其他操作我觉得没必要记录的很详细了,因为基本都很简单,下面列出的是文件的常用方法,并且在例子中有相关说明。另外有一点注意的是读取文件中经常存在的编码问题。不同的解释器默认的编码不同,具体解决方案会再介绍。

常见文件操作方法:

方法

描述

f.close()

关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄数。

f.name()

获取文件名称

f.next()

返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。

f.fileno()

获得文件描述符,是一个数字。返回一个长整型的”文件标签“

f.flush()

刷新输出缓存,把缓冲区的内容写入硬盘

f.isatty()

如果文件是一个终端设备文件(Linux系统中),则返回True,否则返回False。

f.read([size])

读出文件,size为读取的长度,以byte为单位

f.readline([size])

读出一行信息,若定义了size,则读出 一行的一部分

f.readlines([size])

读出所有行,也就是读出整个文件的信息。 (把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分)

f.seek(offset[,where])

把文件指针移动到相对于where的offset位置。where为0表示文件开始处,这是默认值 ;1表示当前位置;2表示文件结尾。 (注意:如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾)

f.tell()

获得文件指针位置,标记当前位置,以文件开头为原点

f.truncate([size])

把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

f.write(string)

把string字符串写入文件,write()不会在str后加上一个换行符。

f.writelines(list)

把list中的字符串一行一行地写入文件,是连续写入文件,没有换行。

对文件的相关操作有时需要引入shutil模块:

>>>  import   shutil
 >>> shutil.copyfile( '  test.txt  ' , '  123.txt  ' )   #  参数只能是文件 
>>> shutil.copy( "  olddir  " , "  newfileordir  " )     #  olddir只能是文件夹,newfile可以是文件,也可以是目标目录 
>>> shutil.copytree( "  olddir  " , "  newdir  " )      #  olddir和newdir都只能是目录,且newdir必须不存在 
>>> shutil.move( "  oldpos  " , "  newpos  " )   #  移动文件或目录 
>>> shutil.rmtree( "  dir  " )     #  空目录、有内容的目录都可以删 


>>>  import   os
 >>> os.remove( "  file  " )  #  删除文件 
>>> os.rename( "  oldname  " , "  newname  " )   #  文件或目录都是使用这条命令 

相关示例~~未完待续--

 

 

 

标签:  Python

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于python学习笔记 目录和文件操作的详细内容...

  阅读:49次