Python IO--文件和目录

Python 操作目录和文件- os模块

操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中

查看当前目录的绝对路径: >>> os.path.abspath('.')

在某个目录下创建一个新目录, 首先把新目录的完整路径表示出来:

>>> os.path.join('e:\\dir0', 'testdir')

'e:\\dir0\\testdir'

把两个路径合成一个时,不要直接拼字符串,而要通过os.path.join()函数,这样可以正确处理不同操作系统的路径分隔符

要拆分路径时,也不要直接去拆字符串,而要通过os.path.split()函数,这样可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名: >>> os.path.split('e:\\dir0\\testdir\\test.txt') ('e:\\dir0\\testdir', 'test.txt')

os.path.splitext()可以直接让你得到文件扩展名,很多时候非常方便: >>> os.path.splitext('/path/to/file.txt') ('/path/to/file', '.txt')

然后创建一个目录:

>>> os.mkdir('e:\\dir0\\testdir')

删掉一个目录:

m >>> os.rmdir('e:\\dir0\\testdir')

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

文件操作使用下面的函数。假定当前目录下有一个test.txt文件:

对文件重命名:

>>> os.rename('test.txt', 'test.py')

删掉文件:

>>> os.remove('test.py')

如何利用Python的特性来过滤文件。比如我们要列出当前目录下的所有目录,只需要一行代码:

>>> [x for x in os.listdir('.') if os.path.isdir(x)]

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

>>> [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']

相对路径转绝对路径
import os
print(os.path.abspath('.'))#当前路径的绝对路径

在某个目录下创建新目录
os.mkdir('dir1')#(1)相对路径创建目录
#os.mkdir('dir2\\dir3')#(2)相对路径 同时创建多级目录 ERROR
os.mkdir('dir1\\dir2')


练习

#选择一个文件夹,如day10
#要求:在day10下创建一个我文件夹day10copy
# 将day10下所有文件(同时不包含.py文件)及目录结构,拷贝到day10copy下

import os

def my_copy_dir(ori_path, target_path, exclude_pre=['.py']):
    #从 源目录 拷贝到 目标目录, 结构相同

    if os.path.isfile(ori_path):#如果是文件
       if os.path.splitext(ori_path)[1] not in exclude_pre:#过滤掉.py文件
           #复制文件
           with open(ori_path, 'rb') as f:
              cntent_byte = f.read()
           with open(target_path, 'wb' as f:
              f.write(content_byte)
    else:#如果是目录
       #需要创建复制的目录,如果还未被创建需要创建
       if not os.path.isdir(target_path):
          os.mkdir(target_path)
       #遍历当前目录下的文件及文件夹,使用 递归方式
       for x in os.listdir(ori_path):
           ori_path_next = os.path.join(ori_path, x)#拼接完整路径
           #去掉复制目录
           if ori_path_next == target_path:
               continue 
           target_path_next == os.path.join(target_path, x)
           my_copy_dir(ori_path_next, target_path_next)#递归

#测试
if __name__=='__main__':
   path1 = r'.'
   path2 = r'.\day10copy'
   my_copy_dir(path1, path2)
          
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值