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)