Python3笔记049

第10章 文件及目录操作

10.2 目录操作

目录操作:创建、遍历、删除、拷贝、路径、判断

1、os模块

# 获取当前操作系统类型
import os
t = os.name
print(t)
output:
nt
# 获取当前操作系统路径分隔符
import os
t = os.sep
print(t)
output:

2、路径

定义:用于定位一个文件或目录的字符串被称为一个路径,分为绝对路径和相对路径
  • 相对路径

当前工作目录:是指当前文件所在的目录,可用getcwd()函数获取。

# 获取当前的工作目录
import os
t = os.getcwd()
print(t)
output:
D:1Pythonpythonbasic

在表示路径的字符串前面加上字母r,那么该字符将原样输出

  • 绝对路径

绝对路径是指在使用文件时指定文件的实际路径,它不依赖于当前目录。可以用abspath()函数获取一个文件的绝对路径

# 绝对路径用os.path.abspath(path)
import os
t = os.path.abspath("work1.txt")
print(t)
output:
D:1Pythonpythonbasicwork1.txt
  • 拼接路径

将两个或多个路径拼接在一起,可使用os.path模块提供的join()函数

# 拼接路径用os.path.join(path1[,path2[,......]])

3、判断文件或目录是否存在

# 判断文件是否存在用os.path.exists(path)
import os
t = os.path.exists("work1.txt")
print(t)
output:
True

4、创建目录

os.mkdir(path,mode=0o777) # 创建一级目录
# 递归的创建目录
import os
os.makedirs('tmp/python/fileop',exist_ok=True)

会在当前工作目录下面创建 tmp目录,在tmp目录下面再创建 python目录,在Python目录下面再创建fileop目录

exist_ok=True 指定了,如果某个要创建的目录已经存在,也不报错

5、删除目录

os.rmdir(path) # 只能删除空目录
import shutil 
shutil.rmtree("C:\demo\test") # 递归删除目录,删除非空目录
shutil.rmtree() 可以递归的删除某个目录所有的子目录和子文件
import shutil 
shutil.rmtree('tmp')
# 递归删除某一目录下的子目录及文件用rmtree方法
import shutil

filename = r"D:1Pythonpythonbasicwork1"
if os.path.exists(filename) == True:
    shutil.rmtree(filename)
    if os.path.exists(filename) == False:
        print("目录存在,已被删除!")
else:
    print("目录不存在,未执行删除操作!")

显示目录

列出某一目录下所有文件和目录

# 显示目录用os.listdir("路径"),类似于dir
import os
t = os.listdir(r"d:1pythonpythonbasic")
print(t)
output:
['class.py', 'dict.py', 'file.py', 'func.py', 'keywordlist.py', 'list.py', 'r1.txt', 'string1.py', 'sum1-100.py', 'traversal_strings.py', 'while.py', 'with_as.py', 'work1.txt', '__init__.py', '测试工匠麻辣烫博客.png']

6、遍历目录

os模块的walk()函数用于遍历目录

os.walk(top[,topdown][,onerror][,followlinks])
import os
path = "C:\demo"
print("【",path,"】目录下包括的文件和目录")
for root, dirs, files in os.walk(path, topdown=True):
	for name in dirs:
		print(".",os.path.join(root,name))
	for name in files:
		print("。",os.path.join(root,name))

7、拷贝目录

如果我们要拷贝一个目录里面所有的内容(包括子目录和文件、子目录里面的子目录和文件,等等)到另外一个目录中,可以使用 shutil的copytree函数。

如下所示

from shutil import copytree

# 拷贝 d:/tools/aaa 目录中所有的内容 到 e:/bbb 中
copytree('d:/tools/aaa', 'e:/new/bbb')

注意拷贝前, 目标目录必须 不存在 ,否则会报错。

上面的代码执行前面,如果 e:/new/bbb 已经存在,执行到copytree时,就会报错

上面的代码执行前面,如果 e:/new 这个目录都不存在,执行到copytree时,就会 创建 e:/new 目录,再创建 e:/new/bbb 目录,再拷贝 d:/tools/aaa 目录中所有的内容 到 e:/new/bbb 中。

上面的代码执行前面,如果 e:/new 这个目录存在,但是 e:/new/bbb 不存在,执行到copytree时,就只会 创建 e:/new/bbb ,再拷贝 d:/tools/aaa 目录中所有的内容 到 e:/new/bbb 中。

高级操作

判断一个名字是目录还是文件

# 判断一个名字是目录还是文件
os.path.isdir("名称")判断是不是目录
os.path.isfile("名称")判断是不是文件

import os
t = os.path.isdir(r"d:1pythonpythonbasic")
print(t)
f = os.path.isfile(r"d:1pythonpythonbasicwork1.txt")
print(f)
output:
True
True

修改文件名、目录名用os.rename()

# 修改文件名、目录名用os.rename()
import os

# 修改目录名 d:/tools/aaa 为 d:/tools/bbb
os.rename('d:/tools/aaa','d:/tools/bbb')

# 修改文件名 d:/tools/first.py 为 d:/tools/second.py
os.rename('d:/tools/first.py','d:/tools/second.py')

对路径的操作

# 对于文件名的操作,比如 获取文件名称,文件所在目录,文件路径的拼接等,都可以使用 os.path 模块。
import os
p = r"d:1pythonpythonbasicwork1.txt"
t = os.path.basename(p) # 取文件名
print(t)
f = os.path.dirname(p) # 取目录
print(f)
j = os.path.join(t, f, os.path.basename(p)) # 拼接
print(j)
output:
work1.txt
d:1pythonpythonbasic
d:1pythonpythonbasicwork1.txt

判断文件、目录是否存在

# 判断一个指定路径的文件或目录是否存在用exists()
import os
os.path.exists('d:/systems/cmd.exe')
os.path.exists('d:/systems')

获取文件的大小和日期

import time
getsize = os.path.getsize(r"d:1pythonpythonbasicwork1.txt")
getmtime = time.ctime(os.path.getmtime(r"d:1pythonpythonbasicwork1.txt"))
print(getsize)
print(getmtime)
output:
88
Fri Jul 24 11:34:29 2020

递归的遍历目录下面所有的文件

假如我们要获取某个目录中所有的 文件, 包括子目录里面的文件。 可以使用 os库中的walk方法

比如我们要得到某个目录下面所有的子目录 和所有的文件,存放在两个列表中

可以这样写代码

import os

# 目标目录
targetDir = r'd:	mputildistcheck'
files = []
dirs  = []

# 下面的三个变量 dirpath, dirnames, filenames
# dirpath 代表当前遍历到的目录名
# dirnames 是列表对象,存放当前dirpath中的所有子目录名
# filenames 是列表对象,存放当前dirpath中的所有文件名

for (dirpath, dirnames, filenames) in os.walk(targetDir):
   files += filenames
   dirs += dirnames

print(fles)
print(dirs)

如果我们只需要获取目录中所有的文件,或者只需要子目录,可以这样

import os
from os.path import isfile, join,isdir

# 目标目录
targetDir = r'd:	mputildistcheck'

# 所有的文件
print([f for f in os.listdir(targetDir) if isfile(join(targetDir, f))])

# 所有的目录
print([f for f in os.listdir(targetDir) if isdir(join(targetDir, f))])

得到目录中指定扩展名的文件和子目录

# 可以使用glob库
import glob
exes = glob.glob(r'd:	mp*.txt')

print(exes)
原文地址:https://www.cnblogs.com/infuture/p/13383444.html