Python 之 操作文件和目录

来源:互联网 发布:高仿拉勾网 php源码 编辑:程序博客网 时间:2024/06/05 08:46

Python 对文件和目录的处理主要用到 osshutil 模块

有关当前工作路径

  • 获取当前工作路径 :os.getcwd() 或者 os.path.abspath('.')
  • 更改当前工作路径 :os.chdir ('path')
  • 查看指定目录下的文件:os.listdir('path'), 比如查看当前工作路径下的所有文件,可以这样 os.listdir(os.getcwd()) 或者 os.listdir('.'),查看父目录下的文件可用 os.listdir('..')

有关目录的操作

  • 创建单个目录:os.mkdir('dir')
  • 创建多级目录: os.makedirs('D:/python/one/two')
  • 复制目录: shutil.copytree('olddir','newdir'), 其中 newdir 必须不存在
  • 剪切(移动)目录: shutil.move('oldpos','newpos')
  • 重命名(文件):os.rename('oldname','newname') 文件或目录都是使用这条命令
  • 删除目录:os.rmdir(),只能删除空目录
  • 删除目录:shutil.rmtree(),空目录和有内容的目录都可删除

有关文件的操作

  • 新建文件:f=open('file.py','w'),别忘了关闭f.close() ,或者
with open('file.py','w') as f:    pass
  • 复制文件:shutil.copyfile('oldfile","newfile') oldfile 和newfile 都只能是文件,可以包含路径
  • 复制文件:shutil.copy('oldfile','newfile') oldfile只能是文件,newfile可以是文件,也可以是目标目录
  • 移动文件:shutil.move('oldpos','newpos')文件或目录都是使用这条命令
  • 重命名文件:os.rename('oldname','newname') 文件或目录都是使用这条命令
  • 删除文件 os.remove('file')

文件的读写

with open('file.py','w') as f:    f.read()             # 全部读入    f.read([size])       #size为读取的长度,以byte为单位    f.readline([size])   #读一行,如果定义了size,有可能返回的只是一行的一部分    f.readlines([size])  #把文件每一行作为一个list的一个成员,并返回这个list。其如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。    f.write(str)         #把str写到文件中,write()并不会在str后加上一个换行符    f.writelines(seq)    #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。

关于open 模式:

w 以写方式打开,
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )

常用函数

  • 检验给出的路径是否是一个文件:os.path.isfile()
  • 检验给出的路径是否是一个目录:os.path.isdir()
  • 判断是否是绝对路径:os.path.isabs()
  • 检验给出的路径是否真地存 :os.path.exists()
  • 把两个路径合成一个:os.path.join()
>>> os.path.join('D:\\','python','testdir')'D:\\python\\testdir'>>> os.path.join('D:\\user','python','testdir')'D:\\user\\python\\testdir'>>> os.path.join('D:','python','testdir')'D:python\\testdir'  #出现这样的结果就不对了

注意上面的区别,如果在 ipython notebook 上运行是都不需要加 // 的,下面是第三个代码在 ipython notebook 上的运行结果:

>>> os.path.join('D:','python','testdir')'D:/python/testdir'
  • 拆分路径:os.path.split()函数,可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名:
>>> os.path.split('/Users/michael/testdir/file.txt')('/Users/michael/testdir', 'file.txt')
  • 直接得到文件扩展名 os.path.splitext()
>>> os.path.splitext('/path/to/file.txt')('/path/to/file', '.txt')

这些合并、拆分路径的函数并不要求目录和文件要真实存在,它们只对字符串进行操作。

应用

最后看看如何利用Python的特性来过滤文件。

1.比如我们要列出当前目录下的所有目录,只需要一行代码:

>>> [x for x in os.listdir('.') if os.path.isdir(x)]['.lein', '.local', '.m2', '.npm', '.ssh', '.Trash', '.vim', 'Applications', 'Desktop', ...]

2.要列出所有的.py文件,也只需一行代码:

>>> [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']['apis.py', 'config.py', 'models.py', 'pymonitor.py', 'test_db.py', 'urls.py', 'wsgiapp.py']

参考:

  • http://www.cnblogs.com/rollenholt/archive/2012/04/23/2466179.html

  • http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f……

0 0