欢迎使用CSDN-markdown编辑器1

资源操作之文件和路径(上)

1. 路径表示法

1) 相对路径

获取文件相对路径
一般写法: 使用Python3的标准库,pathlib模块Path类的构造函数

from pathlib import Path

# 相对于当前目录的相对路径
p1 = Path()
print(p1)  # 结果为:.

# 相对于当前目录相对路径a/b/c/d
p2 = Path('a', 'b', 'c/d')
print(p2)  # 结果为:a\b\c\d
2) 绝对路径

获取文件绝对路径表示
推荐写法: 使用Python3的标准库,pathlib模块Path类的absolute()方法

from pathlib import Path

# 用户当前的工作目录为:
D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\express

# 当前目录的Path路径
p1 = Path()
print(p1.absolute())  # 结果为:D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\express

# 当前文件的绝对路径
p1 = Path(__file__)
print(p1.absolute())  # 结果为:D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\express\absolute_path.py

# 当前目录下的a/b/c/d目录
p2 = Path('a', 'b', 'c/d')
print(p2.absolute())  # 结果为:D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\express\a\b\c\d

# 带有盘符的路径即生成绝对路径
p3 = Path('D:', 'a', 'b', 'test.txt')
print(p3) # 结果为:D:a\b\test.txt
p3 == p3.absolute()  # 结果为:True

推荐写法: 使用Python3的标准库,os.path模块的abspath()方法

from pathlib import Path
import os

# 用户当前的工作目录为:
D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\express

# 当前目录的绝对路径
#  写法一:
p1 = os.path.abspath('.')
print(p1)  # 结果为:D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\express
#  写法二:
p1 = os.path.abspath('')
print(p1)  # 结果为:D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\express

# 当前文件的绝对路径
p1 = os.path.abspath(__file__)
print(p1)  # 结果为:D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\express\absolute_path.py

# 当前目录下的a/b/c/d目录的绝对路径
# 写法一:
path = 'a/b/c/d'
p2 = os.path.abspath(path)
print(p2)  # 结果为:D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\express\a\b\c\d
# 写法二:
# 构造'a/c/c/d'的Path
path = Path('a', 'b', 'c/d')
p2 = os.path.abspath(path)
print(p2)  # 结果为:D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\express\a\b\c\d

# 带有盘符的路径即生成绝对路径
# 写法一:
path = 'C:/a/b/test.txt'
p3 = os.path.abspath(path)
print(p3)  # 结果为:C:a\b\test.txt
# 写法二:
# 构造'C:a\b\test.txt'的Path
path = Path('C:', 'a', 'b', 'test.txt')
p3 = os.path.abspath(path)
print(p3)  # 结果为:C:a\b\test.txt

2. 路径获取

1) 获取用户工作目录

获取用户工作目录
推荐写法: 使用Python3的标准库,os模块getcwd()函数

import os
os.getcwd()  # 结果为:'D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\obtain'

一般写法: 使用Python3的标准库,os模块os.path.abspath()函数

import os

# 写法一:
os.path.abspath('.')  # 结果为:'D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\obtain'
# 写法二:
os.path.abspath(os.curdir)  # 结果为:'D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\obtain'
# 写法三:
os.path.abspath('')  # 结果为:'D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\obtain'

一般写法: 使用Python3的标准库,pathlib模块Path类的cwd()或absolute()方法

from pathlib import Path

# 参数为空表示当前目录
p = Path()
# 写法一:
print(p.cwd())  # 结果为:'D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\obtain'
# 写法二:
print(p.absolute())  # 结果为:'D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\obtain'
2) 拼接文件路径

基于基础的路径进行路径的拼接操作
一般写法: 使用’/'运算符

  • 不管是 UNIX 风格的路径,还是 Windows风格的路径,都是使用斜杠作为连接运算符的
from pathlib import Path

p1 = Path('D:', 'a/b')
print(p1)  # 结果为:D:a\b

# Path对象和字符串拼接
p2 = p1 / 'c/d' / 'test.txt'
print(p2)  # 结果为:D:a\b\c\d\test.txt

# Path对象和Path对象拼接
p3 = Path('c', 'd', 'test.txt')
p4 = p1 / p3
print(p4)  # 结果为:D:a\b\c\d\test.txt

一般写法: 使用Python3的标准库,pathlib模块Path类的joinpath()方法

from pathlib import Path

p1 = Path('D:', 'a/b')

# Path对象和字符串拼接
p2 = p1.joinpath('c/d', 'e', 'test.txt')
print(p2)  # 结果为:D:a\b\c\d\e\test.txt
p3 = Path('c/d', 'e', 'test.txt')

# Path对象和Path对象拼接
p4 = p1.joinpath(p3)
print(p4)  # 结果为:D:a\b\c\d\e\test.txt
3) 构造Path路径

Path用于来表示文件或者目录的路径
一般写法: 使用Python3的标准库,pathlib模块Path类的构造方法

from pathlib import Path

# 表示当前目录的Path路径
p1 = Path()
print(p1.cwd())  # 结果为:D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\obtain

# 当前目录下的a/b/c/d
p2 = Path('a', 'b', 'c/d')
# 相对路径
print(p2)  # 结果为:a\b\c\d
# 绝对路径
print(p2.absolute())  # 结果为:D:\ProjectCode\python_guide\PythonCodingGuide\doc\resource\path\obtain\a\b\c\d

# 带有盘符的路径即生成绝对路径
p3 = Path('D:', 'a', 'b', 'test.txt')
# 绝对路径
print(p3)  # 结果为:D:a\b\test.txt
# 绝对路径
print(p3.absolute()) # 结果为:D:a\b\test.txt

3. 路径解析

1) 逻辑父目录

获取目录的逻辑父目录
一般写法: 使用Python3的标准库,pathlib模块Path类的parent属性

from pathlib import Path

p = Path('/a/b/c')
parent = p.parent
print(parent)  # 结果为:\a\b
2) 父目录序列

获取给定目录的父目录序列
一般写法: 使用Python3的标准库,pathlib模块Path类的parents属性

  • 索引为0的值为直接父目录
from pathlib import Path

p = Path('D:', '/a/b/c')
print(p)  # 结果为:D:\a\b\c
parents = p.parents
for p in parents:
    print(p)
# 输出结果为:
'''
D:\a\b
D:\a
D:\
'''
3) 目录最后一部分

获取目录路径的最后一部分
一般写法: 使用Python3的标准库,pathlib模块Path类的name属性

from pathlib import Path

p = Path('D:', '/a/b/c')
print(p)  # 结果为:D:\a\b\c

name = p.name
print(name)  # 结果为:c

p = Path('D:', '/a/b/test.txt')
print(p)  # 结果为:D:\a\b\test.txt

name = p.name
print(name)  # 结果为:test.txt
4) 目录最后一部分的扩展名

获取目录路径的最后一部分文件名的扩展名
一般写法: 使用Python3的标准库,pathlib模块Path类的suffix属性

  • 若文件有多个扩展名,则取最末尾的扩展名
from pathlib import Path

p = Path('D:', '/a/b/test.txt')
print(p) # 结果为:D:\a\b\test.txt

suffix = p.suffix
print(suffix) # 结果为:.txt
5) 目录最后一部分去除后缀

获取目录路径的最后一部分并且除去文件名的后缀
一般写法: 使用Python3的标准库,pathlib模块Path类的stem属性

from pathlib import Path

p = Path('D:', '/a/b/c')
print(p)  # 结果为:D:\a\b\c

stem = p.stem
print(stem)  # 结果为:c

p = Path('D:', '/a/b/test.txt')
print(p)  # 结果为:D:\a\b\test.txt

stem = p.stem
print(stem)  # 结果为:test
6) 目录最后一部分的扩展名列表

获取给定目录路径的最后一部分的扩展名列表
一般写法: 使用Python3的标准库,pathlib模块Path类的suffix属性

from pathlib import Path

p = Path('D:', '/a/b/c.e.f')
suffixs = p.suffixs
print(suffixs)  # 结果为:['.e', '.f']

p = Path('D:', '/text.tar.gz')
suffixs = p.suffixs
print(suffixs)  # 结果为:['.tar', '.gz']
7) 将path分割成目录和文件名

推荐写法: 使用Python3的标准库,os模块的函数:os.path.split(path),path指代一个路径

  • 需要导入os模块
  • 将path拆分成目录和文件名,返回一个(head, tail)二元组
  • head为目录,若path中没有斜线(’’,’/’),则head为空字符串
  • tail为文件名,tail中永远不会有斜线,若path以斜线(’’,’/’)结尾,则tail为空字符串
  • 若path为空字符串,则head和tail均为空
  • 使用函数os.path.join(path, *paths)可还原path(字符串可能不尽相同)
import os

path1 = "path\\parse\\path_split.py"
(head1, tail1) = os.path.split(path1)
print((head1, tail1))  # ('path\\parse', 'path_split.py')

path_join = os.path.join(head1, tail1)  # 使用函数os.path.join(path, *paths)拼接,还原path
print(path_join)  # "path\parse\path_split.py"

path2 = "path/parse"
(head2, tail2) = os.path.split(path2)
print((head2, tail2))  # ('path', 'parse')

# path以斜线结尾
path3 = "path/parse/"
(head3, tail3) = os.path.split(path3)
print((head3, tail3))  # ('path/parse', '')

# path中没有斜线
path4 = "parse_split.py"
(head4, tail4) = os.path.split(path4)
print((head4, tail4))  # ('', 'parse_split.py')

# path为空
path5 = ""
(head5, tail5) = os.path.split(path5)
print((head5, tail5) ) # ('', '')
8) 将path分割成路径和文件扩展名

推荐写法: 使用Python3的标准库,os模块的函数:os.path.splitext(path),path指代一个路径

  • 需要导入os模块
  • 将path拆分成路径和文件扩展名,返回一个(root, ext)二元组,使root + ext == path
  • root为路径;ext为’.扩展名’,最多包含一个句点’.’,若path中没有扩展名,则ext为空字符串
  • 若path为空字符串,则root和ext均为空
import os

path1 = "path\\parse\\path_split.py"
(root1, ext1) = os.path.splitext(path1)
print((root1, ext1))  # ('path\\parse\\path_split', '.py')
print(root1 + ext1 == path1)  # 还原path True

# path中多个"."
path2 = "parse_splitext..py"
(root2, ext2) = os.path.splitext(path2)
print((root2, ext2))  # ('parse_splitext.', '.py')

# path中没有.扩展名
path3 = "path/parse"
(root3, ext3) = os.path.splitext(path3)
print((root3, ext3))  # ('path/parse', '')

# path为空
path4 = ""
(root4, ext4) = os.path.splitext(path4)
print((root4, ext4))  # ('', '')
9) 提取文件名

推荐写法: 使用Python3的标准库,os模块的函数:os.path.basename(path),path指代一个路径

  • 需要导入os模块
  • 从path中提取文件名,返回一个字符串,若path为空字符串,则返回为空
  • 返回值实际上是使用函数os.path.split(path)拆分path得到的tail
import os

path1 = "path\\parse\\path_basename.py"
name1 = os.path.basename(path1)
print(name1)  # path_basename.py

path2 = "path/parse"
name2 = os.path.split(path2)
print(name2)  # ('path', 'parse')

# path以斜线结尾
path3 = "path/parse/"
name3 = os.path.basename(path3)
print(name3)  # ""

# path中没有斜线
path4 = "parse_basename.py"
name4 = os.path.basename(path4)
print(name4)  # parse_basename.py

# path为空
path5 = ""
name5 = os.path.basename(path5)
print(name5)  # ""

资源操作之文件和路径(下)

4. 路径判断

1) 判断是否为目录

推荐写法: 使用Python3的标准库,os模块的os.path.isdir()函数

  • 需要导入os模块
import os

path = Path('/CODE/pythonCodeGuide/PythonCodingGuide')
if os.path.isdir(path):  # 返回True
'''路径是一个目录'''

path = Path('pythonCodeGuide/PythonCodingGuide')
# 路径不存在时,返回False
if os.path.isdir(path):
'''路径不存在'''

path = Path('/CODE/pythonCodeGuide/PythonCodingGuide/main.py')
# 路径不是目录时,返回False
if os.path.isdir(path):
'''路径不是一个目录'''

推荐写法: 使用Python3的标准库,内置函数is_dir()

path = Path('/CODE/pythonCodeGuide/PythonCodingGuide')
if path.is_dir(): # 返回True
'''路径是一个目录'''

path = Path('pythonCodeGuide/PythonCodingGuide')
# 路径不存在时,返回False
if path.is_dir():
'''路径不存在'''

path = Path('/CODE/pythonCodeGuide/PythonCodingGuide/main.py')
# 路径不是目录时,返回False
if path.is_dir():
'''路径不是一个目录'''
2) 判断是否为文件

推荐写法: 使用Python3的标准库,os模块的os.path.isfile()函数

  • 需要导入os模块
import os

path = Path('/CODE/pythonCodeGuide/PythonCodingGuide/main.py')
if os.path.isfile(path): # 返回True
'''路径是一个文件'''

path = Path('pythonCodeGuide/PythonCodingGuide')
# 路径不存在时,返回False
if os.path.isfile(path):
'''路径不存在'''

path = Path('/CODE/pythonCodeGuide/PythonCodingGuide')
# 路径不是文件时,返回False
if os.path.isfile(path):
'''路径不是一个文件'''

推荐写法: 使用Python3的标准库,内置函数is_file()

path = Path('/CODE/pythonCodeGuide/PythonCodingGuide/main.py')
if path.is_file(): # 返回True
'''路径是一个文件'''

path = Path('pythonCodeGuide/test')
# 路径不存在时,返回False
if path.is_file():
'''路径不存在'''

path = Path('/CODE/pythonCodeGuide/PythonCodingGuide')
# 路径不是文件时,返回False
if path.is_file():
'''路径不是一个文件'''
3) 判断path是否存在

推荐写法: 使用Python3的标准库,os模块的os.path.exists()函数

  • 需要导入os模块
import os

path = Path('/CODE/pythonCodeGuide/PythonCodingGuide')
# 路径存在,返回True
if os.path.exists(path):
'''路径存在'''

path = Path('/pythonCodeGuide/PythonCodingGuide')
# 路径不存在,返回False
if os.path.exists(path):
'''路径不存在'''

推荐写法: 使用Python3的标准库,内置函数exists()

path = Path('/CODE/pythonCodeGuide/PythonCodingGuide')
# 路径存在,返回True
if path.exists():
'''路径存在'''

path = Path('/pythonCodeGuide/PythonCodingGuide')
# 路径不存在,返回False
if path.exists():
'''路径不存在'''
4) 判断是否为绝对路径

推荐写法: 使用Python3的标准库,os模块的os.path.isabs()函数

  • 需要导入os模块
  • 即使目标路径是不存在的,只要命名对象是绝对路径,就返回True
import os

path = Path("D:/pythonCodeGuide/test")
# 当是绝对路径时,返回True
if os.path.isabs(path):
'''是绝对路径'''

path = Path("/pythonCodeGuide/test")
# 当不是绝对路径时,返回False
if os.path.isabs(path):
'''不是绝对路径'''

推荐写法: 使用Python3的标准库,内置函数is_absolute()

  • 即使目标路径是不存在的,只要命名对象是绝对路径,就返回True
path = Path("D:/pythonCodeGuide/test")
# 当是绝对路径时,返回True
if path.is_absolute():
'''是绝对路径'''

path = Path("/pythonCodeGuide/test")
# 当不是绝对路径时,返回False
if path.is_absolute():
'''不是绝对路径'''
5) 判断是否为符号链接

推荐写法: 使用Python3的标准库,os模块的os.path.islink()

  • 如果文件不存在,os.path.islink()返回False
import os

# iamfile-s -> /CODE/pythonCodeGuide/PythonCodingGuide/doc/resource/iamfile

path = Path("/CODE/pythonCodeGuide/PythonCodingGuide/iamfile-s")
# 当对象是一个符号链接时,返回True
if os.path.islink(path):
'''是一个符号链接'''

path = Path("/CODE/pythonCodeGuide/PythonCodingGuide/doc/resource/iamfile")
# 当对象不是一个符号链接时,返回False
if os.path.islink(path):
'''不是一个符号链接'''

推荐写法: 使用Python3的标准库,内置函数is_symlink()

  • 如果文件不存在,os.path.islink()返回False
# iamfile-s -> /CODE/pythonCodeGuide/PythonCodingGuide/doc/resource/iamfile

path = Path("/CODE/pythonCodeGuide/PythonCodingGuide/iamfile-s")
# 当对象是一个符号链接时,返回True
if path.is_symlink():
'''是一个符号链接'''

path = Path("/CODE/pythonCodeGuide/PythonCodingGuide/doc/resource/iamfile")
# 当对象不是一个符号链接时,返回False
if path.is_symlink():
'''不是一个符号链接'''
6) 判断是否为目录的符号链接

推荐写法: 使用Python3的标准库,判断是否为目录的符号链接

def is_dir_symlink(location):
	"""第一步:转换为path
	   第二步:path为符号链接文件
	   第三步:判断符号链接的目标文件是否是目录"""
	path = Path(location)
	if not path.exists():
		return False
	return path.is_symlink() & path.is_dir()
	# 或者引入os模块 return os_path_islink() & os.path.isdir()

# iamdir-s -> /CODE/pythonCodeGuide/PythonCodingGuide/doc/resource/iamdir

# 对象为符号链接,且为目录的符号链接
is_dir_symlink("/CODE/pythonCodeGuide/PythonCodingGuide/iamdir-s")  # 结果:True
# 对象不是符号链接
is_dir_symlink("/CODE/pythonCodeGuide/PythonCodingGuide/iamdir-h")  # 结果:False
# 对象不存在
is_dir_symlink("/CODE/pythonCodeGuide/PythonCodingGuide/iamdir_not_exist")  # 结果:False
7) 判断是否为文件的符号链接

推荐写法: 使用Python3的标准库,判断是否为文件的符号链接

def is_file_symlink(location):
	"""第一步:转换为path
	   第二步:path为符号链接文件
	   第三步:判断符号链接的目标文件是否是文件"""
	path = Path(location)
	if not path.exists():
		return False
	return path.is_symlink() & path.is_file()
	# 或者引入os模块 return os_path_islink() & os.path.isfile()
	
# iamfile-s -> /CODE/pythonCodeGuide/PythonCodingGuide/doc/resource/iamfile

# 对象为符号链接,且为文件的符号链接
is_file_symlink("/CODE/pythonCodeGuide/PythonCodingGuide/iamfile-s")  # 结果:True
# 对象为普通文件
is_file_symlink("/CODE/pythonCodeGuide/PythonCodingGuide/iamfile-h")  # 结果:False
# 对象文件不存在
is_file_symlink("/CODE/pythonCodeGuide/PythonCodingGuide/iamfile_not_exist")  # 结果:False
5. 目录创建
1) 创建单个目录

推荐写法: 使用Python3的标准库,os模块的函数:os.mkdir(path[, mode=0o777])

  • 需要导入os模块
  • 用于在已存在的目录中创建一个文件夹,path指代一个文件夹名或路径,mode为权限模式(因平台而异)
  • 若path是文件夹名,则默认在当前目录下创建
  • 若path包含路径,则必须给出一个已存在的父路径,否则会抛出FileNotFoundError
  • 若路径中包含转义字符,可使用双斜线“\”或“r”前缀,消除转义字符
  • 若目标文件夹已存在,会抛出FileExistsError
import os

os.mkdir("dir1")  # 在当前目录下创建dir
# 抛出FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'dir1'
os.mkdir("dir1")

# 抛出FileNotFoundError: [WinError 3] 系统找不到指定的路径。: '\\test\\dir1'
os.mkdir("\\test\\dir1")

# 在parent_path下创建dir2
os.mkdir(r"parent_path\dir2")
2) 创建多级目录

推荐写法: 使用Python3的标准库,os模块的函数:os.makedirs(name [, mode=0o777, exist_ok=False])

  • 需要导入os模块
  • 用于递归创建一个或多个文件夹,name指代一个文件夹名或路径,mode为权限模式
  • 若name是文件夹名,则默认在当前目录下创建
  • 若name包含路径,则会递归创建所有给出的不存在的文件夹
  • 若目标文件夹已存在:exists_ok=False(默认),抛出FileExistsError;exists_ok=True,不会抛出异常
import os

os.makedirs("dir1")  # 在当前目录下创建dir
# 抛出FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'dir1'
os.makedirs("dir1")

os.makedirs("dir1", exist_ok=True)  # 设置exist_ok=True,当目标文件夹已存在,不会抛出异常
os.makedirs("test\\dir2")  # 在当前目录下创建test,在test下创建dir2
os.makedirs(r"parent_path\dir3")  # 创建"parent_path\\dir3"路径上所有不存在的文件夹

6. 目录操作

1) 目录遍历

推荐写法: 使用Python3的标准库,os模块的函数:os.walk(top[, topdown=True, οnerrοr=None,followlinks=False])

  • 需要导入os模块
  • 递归遍历指定路径,返回一个(dirpath, dirnames, filenames)三元组
  • dirpath是一个字符串,表示目录的路径;dirnames是一个列表,包含了dirpath下所有的一级目录的名字(不包含子目录);filenames是一个列表,包含了dirpath下所有的文件的名字(不包含子目录),使用函数os.path.join(dirpath, name)可得到文件的全路径
  • top指定要遍历的目录的路径,其它三个是可选参数,topdown指定递归遍历的顺序,onerror指定异常时的回调函数
  • 若topdown=True(默认),则自顶向下深度遍历目录树,先遍历父目录,再遍历子目录
  • 若topdown=False,则自底向上遍历目录树,先遍历子目录,再遍历父目录
import os

# 自顶向下遍历目录树
for dirpath, dirnames, filenames in os.walk("parent_path\\path"):
	print(dirpath)  # 返回一个string,表示目录的路径
	print(dirnames)  # 返回一个list,包含了dirpath下所有的一级目录名
	print(filenames)  # 返回一个list,包含了dirpath下所有的文件名
	
	for name in filenames:
		print(os.path.join(dirpath, name))  # 获取top目录下所有文件的全路径(包括子目录)
2) 列举目录下所有文件(不包含子文件夹)

获取文件夹下的所有文件(不包含子文件夹)
推荐写法: 使用Python3的标准库,os模块的os.listdir()函数

  • 需要导入os模块
  • os.listdir()函数会列出目标目录下所有文件以及子目录名称
  • 使用os.path.isfile()函数筛选出其中的文件
import os

file_list = [f for f in os.listdir("/pythonTest/work") if os.path.isfile(os.path.join("/pythonTest/work", f))]

# 也可以写成如下形式
for filename in os.listdir("/pythonTest/work"):
	if os.path.isfile(filename):
		print(filename)

推荐写法: 使用Python3的标准库,os模块的os.walk()函数

  • 需要导入os模块
  • 递归遍历指定路径,返回一个(dirpath, dirnames, filenames)三元组,如果只需要顶层目录下的文件,只需要在第一次迭代后break即可
import os

file_list = []
for (dirpath, dirnames, filenames) in os.walk("/pythonTest/work"):
	file_list.extend(filenames)
	break
3) 列举目录下所有文件(包含子文件夹)

获取文件夹下的所有文件(包含子文件夹)
推荐写法: 使用Python3的标准库,os模块的os.walk()函数

  • 需要导入os模块
  • 递归遍历指定路径,返回一个(dirpath, dirnames, filenames)三元组,如果只需要文件名,取出filenames即可
import os

file_list = []
for (dirpath, dirnames, filenames) in os.walk("/pythonTest/work"):
	file_list.extend(filenames)

一般写法: 使用Python3的标准库,os模块的os.listdir()函数

  • 需要导入os模块
import os

def print_files(path):
	"""第一步:os.listdir()函数列出目标目录下所有的文件和子目录;
       第二步:dirs返回当前目录下的所有目录,递归dirs直到最深一层;
  	   第三步:打印所有文件名"""
	lsdir = os.listdir(path)
	dirs = [i for i in lsdir if os.path.isdir(os.path.join(path, i))]
	if dirs:
		for i in dirs:
			print_files(os.path.join(path, i))
	files = [i for i in lsdir if os.path.isfile(os.path.join(path, i))]
	for f in files:
		print(f)
		
print_files("/pythonTest/work")
4) 列举当前目录下符合条件的文件

获取当前目录下符合条件的文件名
推荐写法: 使用Python3的标准库,glob模块的glob.glob()函数

  • 需要导入glob模块
  • 返回目录下符合条件的文件名的列表
  • 不包含子目录下的文件
import glob

# 获取顶层目录下所有python文件名
glob.glob("/pythonTest/work/*.py")

推荐写法: 使用Python3的标准库,os模块的os.walk()函数

  • 需要导入os模块
  • 获取所有文件后筛选出符合条件的文件
  • 若需要包含子目录下的文件,去掉break即可
import os

# 筛选出顶层目录下的python文件
file_list = []
for (dirpath, dirnames, filenames) in os.walk("/pythonTest/work"):
	for item in filenames:
		if ".py" in item:
			file_list.append(item)
	break
print(file_list)
5) 列举目录下所有子目录

获取文件夹下的所有子目录
推荐写法: 使用Python3的标准库,os模块的os.listdir()函数

  • 需要导入os模块
  • os.listdir()函数会列出目标目录下所有文件以及子目录名称
  • 使用os.path.isdir()函数筛选出其中的目录
import os

"""只包含顶层目录下的子目录"""
dir_list = [f for f in os.listdir("/pythonTest/work") if os.path.isdir(os.path.join("/pythonTest/work", f))]

# 也可以写成如下形式
for filename in os.listdir("/pythonTest/work"):
	if os.path.isdir(filename):
		print(filename)

"""获取目录下的所有子目录名称"""
def print_files(path):
	lsdir = os.listdir(path)
	dirs = [i for i in lsdir if os.path.isdir(os.path.join(path, i))]
	if dirs:
		for i in dirs:
			print_files(os.path.join(path, i))
	sub_dirs = [i for i in lsdir if os.path.isdir(os.path.join(path, i))]
	for f in sub_dirs:
		print(f)
		
print_files("/pythonTest/work")

推荐写法: 使用Python3的标准库,os模块的os.walk()函数

  • 需要导入os模块
  • 递归遍历指定路径,返回一个(dirpath, dirnames,filenames)三元组,如果只需要顶层目录下的目录,只需要在第一次迭代后break即可
import os

"""只包含顶层目录下的子目录"""
dir_list = []
for (dirpath, dirnames, filenames) in os.walk("/pythonTest/work"):
	dir_list.extend(dirnames)
	break
	
"""获取目录下的所有子目录名称"""
dir_list = []
for (dirpath, dirnames, filenames) in os.walk("/pythonTest/work"):
	dir_list.extend(dirnames)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flybirding10011

谢谢支持啊999

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值