python中的decimal Python中的os库_绝对路径

 美图欣赏2022/07/14


os模块是Python标准库Python标准库Python标准库中整理文件和目录最为常用的模块,该模块提供了非常丰富的方法处理文件和目录

导入os标准库

import os

os模块属于内置模块,不需要安装,直接导入即可使用。导入os模块后,就可以使用该模块提供的属性和方法

1.os模块

1.1返回当前工作目录

os.getcwd()

getcwd()方法用于返回表示当前工作目录的字符串(当前工作目录是指当前文件所在的目录) 

例如,在C:\Users\X2001565\Desktop\Demo.py文件中,编写以下代码:

import os
# 打印当前工作目录
print(os.getcwd()) # C:\Users\X2001565

1.2列出目录的内容(以列表的形式返回指定路径下的目录名和文件名)

# path表示一个路径,用于指定要获取的文件和目录的根目录,不能是文件路径
os.listdir(path)

listdir()方法用于返回指定路径下的文件和目录的名称(不包括子孙目录) 

例如,C:\Users\X2001565\Desktop\Pure supplier LT项目的目录结构如下图所示:

python中的decimal Python中的os库_python中的decimal_02

使用listdir()方法获取指定路径下的目录和文件,代码如下所示:

import os
# 获取指定路径下的目录和文件列表
path = os.listdir(r'C:\Users\X2001565\Desktop\Pure supplier LT项目')  
print('目录下包括:', path)

程序运行结果如下:

目录下包括:['Input & Output栏位关系梳理', 'pure_ct2r.py', 'pure_ftp.py', 'supply.txt', 'timer.py']

注意:

使用listdir()方法将获取到的指定路径下的目录和文件分别输出,代码如下: 

import os
root = r'C:\Users\X2001565\Desktop\Pure supplier LT项目'
# 获取指定路径下的目录和文件列表
path = os.listdir(root)  
# 路径列表
list_dir = []
# 文件列表
list_file = []

for item in path:  # 遍历获取到的目录和文件列表
    p = os.path.join(root, item)  # 连接目录
    if os.path.isdir(p):  # 判断是否为目录
        list_dir.append(p)
    elif os.path.isfile(p):  # 判断是否为文件
        list_file.append(p)

print('目录:', list_dir)  # 打印目录列表
print('文件:', list_file)  # 打印文件列表

 程序运行结果如下:

目录: ['C:\\Users\\X2001565\\Desktop\\Pure supplier LT项目\\Input & Output栏位关系梳理']
文件: ['C:\\Users\\X2001565\\Desktop\\Pure supplier LT项目\\pure_ct2r.py', 'C:\\Users\\X2001565\\Desktop\\Pure supplier LT项目\\pure_ftp.py', 'C:\\Users\\X2001565\\Desktop\\Pure supplier LT项目\\supply.txt', 'C:\\Users\\X2001565\\Desktop\\Pure supplier LT项目\\timer.py']

1.3创建一级目录 

# path用于指定要创建目录的路径
os.mkdir(path)

mkdir()方法用于创建一级目录 

说明: 使用mkdir()方法只能创建一级目录,即创建目录C:\Users\X2001565\Desktop\Pure supplier LT项目\Test,且目录C:\Users\X2001565\Desktop\Pure supplier LT项目必须是存在的

例如,使用mkdir()方法创建指定的一级目录,代码如下:

import os
os.mkdir(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\test')

程序执行结果如下:

python中的decimal Python中的os库_Pure_03

如果文件夹已经存在,就会报错,所以在创建文件夹之前,需要使用os.path.exists(path)函数判断文件夹是否存在

import os 

if not os.path.exists(os.path.join(r'C:\Users\X2001565\Desktop\Pure supplier LT项目', 'test')):
    os.mkdir(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\test')

扩展补充: os.makedirs(path)创建递归目录

import os 

if not os.path.exists(os.path.join(r'C:\Users\X2001565\Desktop\Pure supplier LT项目', 'test1\tt')):
    os.makedirs(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\test1\tt')

程序执行结果如下:

python中的decimal Python中的os库_Pure_04

点击test1文件夹,结果如下所示

python中的decimal Python中的os库_python中的decimal_05

1.4删除空目录

# path表示要删除的目录
os.rmdir(path)

rmdir()方法用于删除空目录

例如,删除C:\Users\X2001565\Desktop\Pure supplier LT项目路径下的空文件夹Test

python中的decimal Python中的os库_Pure_06

代码如下所示:

import os
# 指定要删除的目录
path = r'C:\Users\X2001565\Desktop\Pure supplier LT项目\Test'
'''
注意:如果要删除的目录不存在,那么将抛出"FileNotFoundError: [WinError 2] 系统找不到指定的文件"异常
因此,在执行os.rmdir()方法前,建议先判断该路径是否存在,可以使用os.path.exists()方法判断
'''
if os.path.exists(path):  # 判断目录是否存在
    os.rmdir(path)  # 删除目录
    print('目录删除成功!')
else:
    print('该目录不存在!')

程序运行结果如下:

目录删除成功!

1.5重命名

os.rename('需要进行重命名的文件或目录的路径','用于指定新的文件或目录名称的路径')

rename()方法用于将文件或目录重命名 

例如,使用 rename()方法将C:\Users\X2001565\Desktop\Pure supplier LT项目\目录下的test.py文件重命名为new_test.py

python中的decimal Python中的os库_python中的decimal_07

代码如下:

import os 
os.rename(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\test.py',r'C:\Users\X2001565\Desktop\Pure supplier LT项目\new_test.py')

程序运行结果如下:

python中的decimal Python中的os库_python中的decimal_08

1.6删除文件 

os.remove('文件名.py')

例如,删除Test.py脚本文件(文件所在位置: C:\Users\X2001565\Desktop\Pure supplier LT项目)

python中的decimal Python中的os库_python中的decimal_09

代码如下所示:

import os
# 获取当前工作目录
os.getcwd() # 'C:\\Users\\X2001565'
# 将当前工作目录更改到Test.py脚本文件所在目录
os.chdir(r'C:\Users\X2001565\Desktop\Pure supplier LT项目')
# 删除Test.py脚本文件
os.remove('Test.py')

1.7执行系统命令

os.system(path)

例:os.system执行.py文件 

import os
# 错误写法,没声明文件类型,默认按系统文件原始格式打开
os.system(r'E:\start.py')       
# 正确写法,声明定义为Python文件,Python运行 
os.system(r'python E:\start.py')

1.8更改当前工作目录

# path用于指定文件路径
os.chdir(path)

chdir()方法用于更改当前工作目录为指定的路径 

例如,使用chdir()方法将当前工作目录更改到D盘根目录下,代码如下:

import os
print('更改前的当前工作目录:', os.getcwd())
os.chdir(r'D:/')  # 将当前工作目录更改到Z盘根目录
print('更改后的当前工作目录:', os.getcwd())

程序运行结果如下:

更改前的当前工作目录: C:\Users\X2001565
更改后的当前工作目录: D:\

1.9遍历目录中的所有文件 

os.walk(path)

walk()方法用于遍历目录树,返回的是一个由路径、文件夹列表、文件列表组成的元组(当前目录的名称,当前目录中子目录的列表,当前目录中文件的列表)

例如,使用 walk()方法遍历当前目录,代码如下:

import os
tuples = os.walk('./')
# 通过for循环输出遍历结果
for tuple1 in tuples:
    print(tuple1) # # 打印每一级目录的元组

遍历当前目录,分别输出指定目录下的子目录及文件,不存在子目录或者文件时,显示无,代码如下:

import os
# 遍历当前目录
tuples = os.walk('./')
# 通过for循环打印遍历结果
for root, dirs, files in tuples:
    print('文件目录:', root)  # 打印文件目录
    print('子目录:', dirs if dirs else '无')  # 打印子目录
    print('文件:', files if files else '无')  # 打印文件

2.os.path模块

os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块的子模块os.path是专门用于进行路径操作的模块

os模块和它的子模块os.path都属于内置模块,不需要安装,直接导入即可使用

导入os 模块的代码如下:

# 导入os模块后,也可以使用其子模块os.path
import os

如果在程序中,只涉及到os.path模块的内容,也可以直接导入os.path,代码如下:

import os.path

2.1判断路径是否存在

# path表示要判断的路径,可以采用绝对路径,也可以采用相对路径
os.path.exists(path)

exists()方法用于判断路径(文件或目录)是否存在,如果存在则返回True;不存在则返回False

例如,使用 exists()方法判断保存在C:\Users\X2001565\Desktop\Pure supplier LT项目目录下的test.py文件是否存在

python中的decimal Python中的os库_Pure_10

代码如下: 

import os.path
path = r"C:\Users\X2001565\Desktop\Pure supplier LT项目\test.py"  # 文件路径
# 判断文件是否存在
if os.path.exists(path):
    print(path, "文件存在")
else:
    print(path, "文件不存在")

程序执行结果如下所示:

C:\Users\X2001565\Desktop\Pure supplier LT项目\test.py 文件存在

用exists()方法判断C:\Users\X2001565\Desktop\Pure supplier LT项目\test目录是否存在,代码如下: 

import os.path
path = r"C:\Users\X2001565\Desktop\Pure supplier LT项目\test"  # 目录
print(os.path.exists(path))  # True

# 判断目录是否存在
if os.path.exists(path):  
    print(path, "目录存在")
else:
    print(path, "目录不存在")

程序运行结果如下所示:

True
C:\Users\X2001565\Desktop\Pure supplier LT项目\test 目录存在

2.2判断是否为目录

# path表示要判断的路径,可以采用绝对路径,也可以采用相对路径
os.path.isdir(path)

isdir()方法用于判断指定的路径是否为目录(文件夹),如果给定的路径是目录,则返回True,否则返回 False

python中的decimal Python中的os库_python中的decimal_11

案例1

代码如下:

import os.path
# 判断是否为目录
print(os.path.isdir(r'C:\Users\X2001565\Desktop\Pure supplier LT项目')) # True
print(os.path.isdir(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\test.py')) # False

案例2

获取指定目录下的全部子目录,首先应用os.listdir()方法获取指定路径下的目录和文件列表,然后遍历该列表,并且将各路径进行连接;再判断是否为目录,如果为目录,则添加到指定列表;最后打印该列表,代码如下: 

import os
root = r'C:\Users\X2001565\Desktop\Pure supplier LT项目'
# 获取指定路径下的目录和文件列表
path = os.listdir(root)
# 路径列表
list_dir = []

# 遍历获取到的目录和文件列表
for item in path:  
    p = os.path.join(root, item) # 连接目录
    if os.path.isdir(p): # 判断是否为目录
        list_dir.append(p)

# 打印目录列表
print(f'目录:{list_dir}')

程序运行结果如下所示:

目录:['C:\\Users\\X2001565\\Desktop\\Pure supplier LT项目\\Input & Output栏位关系梳理', 'C:\\Users\\X2001565\\Desktop\\Pure supplier LT项目\\test']

2.3判断是否为绝对路径 

# path表示要判断的路径,可以采用绝对路径,也可以采用相对路径
os.path.isabs(path)

isabs()方法用于判断路径是否为绝对路径,如果给定的路径是绝对路径,则返回True,否则返回 False

例如,使用isabs()方法分别判断两个文件的路径是否为绝对路径,如果不是绝对路径,则转换为绝对路径并输出,代码如下:

import os.path

path_list = [r'python-package\task1.py', r'C:\Users\X2001565\Desktop\demo',
             r'C:\Users\X2001565\Desktop\main.py']

# 遍历目录列表
for path in path_list:  
    # 如果不是绝对路径
    if not os.path.isabs(path):
        # 转换为绝对路径
        path = os.path.abspath(path)
        # 打印各个路径
        print(path)

程序运行结果如下所示:

C:\Users\X2001565\Desktop\python-package\task1.py

2.4判断是否为普通文件

# path表示要判断的路径,可以采用绝对路径,也可以采用相对路径
os.path.isfile(path)

isfile()方法用于判断是否为普通文件,如果给定的路径对应的文件是普通文件,则返回True,否则返回False

python中的decimal Python中的os库_python中的decimal_11

import os.path
# 判断是否为普通文件
print(os.path.isfile(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\pure_ftp.py')) # True
# 如果指定的文件不存在,则返回False
print(os.path.isfile(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\pure_ftp123.py')) # False
# 目录
path = r'C:\Users\X2001565\Desktop\Pure supplier LT项目'  
filename = 'test.py'  # 文件名
# 连接目录和文件名时,不推荐使用字符串拼接方法实现
# 推荐使用os.path.join()方法实现
# 判断是否为普通文件
print(os.path.isfile(os.path.join(path, filename))) # True

2.5拼接路径

# path表示要拼接的文件路径,路径间使用逗号进行分隔
os.path.join(path1,path2,...)

join()方法用于将两个或者多个路径拼接到一起组成一个新的路径 

注意:使用os.path.join()函数拼接路径时,并不会检测该路径是否真实存在

示例代码如下:

import os.path
# 拼接字符串
# D:\Code\Hudas\Hello.py
print(os.path.join(r"D:\Code\Hudas", "Hello.py"))  
'''
如果要拼接的路径中,存在多个绝对路径,那么按从左到右顺序,以最后一次出现的绝对路径为准
并且该路径之前的参数都将被忽略,代码如下:
'''
# C:/demo
print(os.path.join('E:/Code', 'E:/Code/lesson', 'Code', 'C:/', 'demo'))

2.6获取绝对路径

# path表示要获取绝对路径的相对路径,可以是文件也可以是目录
# 绝对路径是指在使用文件时指定文件的实际路径,它不依赖于当前工作目录
os.path.abspath(path)

abspath()方法用于返回文件或者目录的绝对路径 

注意:abspath()方法在获取实际路径时,并不会检查路径是否真实存在,只是把当前文件目录与 abspath()方法给定的路径进行拼接

import os.path
# 打印绝对路径
# C:\Users\X2001565\Desktop\test.py
print(os.path.abspath(r'test.py'))
# 使用abspath()方法获取当前Python文件的绝对路径,代码如下:
'''
注意:只有当在脚本中执行的时候,os.path.abspath(__file__)才会起作用,因为该命令是获取的当前执行脚本的完整路径
'''
print(os.path.abspath(os.path.basename(__file__)))
print(os.path.abspath(__file__))

2.7从一个路径中提取文件名

# path表示要提取文件名的路径
os.path.basename(path)

basename()方法用于从一个路径中提取文件名,即返回提取后的文件名(获取完整路径当中的主体部分)。当指定的路径是一个不包括文件名的路径时,则返回空字符串 

import os.path

# 打印文件名message.txt
print(os.path.basename(r"demo\message.txt"))  
path1 = 'e:/demo/test.txt'
path2 = 'e:/demo'
path3 = r'E:/Code/Hudas/'
print(os.path.basename(path1))  # test.txt
print(os.path.basename(path2))  # demo
# 如果path 以/或 \ 结尾,那么就会返回空值
print(os.path.basename(path3))  # ""

2.8获取路径中的目录 

# path表示要提取目录的路径
os.path.dirname(path)

dirname()方法用于从一个路径中提取目录(返回提取后的目录)

import os.path  
# 获取完整路径当中的目录部分
# D:\Code\Hudas\python\demo
print(os.path.dirname(r"D:\Code\Hudas\python\demo\message.txt"))
# Hudas
print(os.path.dirname(r"Hudas/message.txt"))

2.9分割路径名

# path表示要分割的路径,可以采用绝对路径,也可以采用相对路径
os.path.split(path)

split()方法用于从一个路径中分割出目录和文件名,返回一个元组,如果指定的是一个相对路径,并且以斜杠结尾,则返回的元组的第二个元素为空

例如,使用split()方法从绝对路径中分割出盘符、各个文件夹名和文件名,示例代码如下:

import os.path
# 代码的路径
lesson_path = r'D:/Code/Hudas/test'

folders = []
# 分割驱动器和目录
drive, path_and_file = os.path.splitdrive(lesson_path)
# 获取驱动器中的盘符
folders.append(drive[0])
# 分割路径和文件名
path, file = os.path.split(path_and_file)

# 处理路径
if path != '':
    # 将路径按/分隔
    for i in path.split('/'):
        if i != '':
            folders.append(i)
            
# 处理文件名
if file != '':
    folders.append(file)

# 打印分隔结果
print(folders) # ['D', 'Code', 'Hudas', 'test']

2.10分割文件名和扩展名

# path表示要分割的路径,可以采用绝对路径,也可以采用相对路径
os.path.splitext(path)

splitext()方法用于从一个路径中分割基本文件名和扩展名,返回一个元组,它的第一个元素为字符串表示的基本文件名(路径中除扩展名以外的部分),第二个元素为字符串表示的扩展名(包括 . 号)

如果指定的路径中不包括扩展名,则返回元组的第二个元素为空字符串

import os.path
# 分割绝对路径
# ('C:\\Users\\X2001565\\Desktop\\list', '.docx')
print(os.path.splitext(r'C:\Users\X2001565\Desktop\list.docx'))
# 分割没有文件名的绝对路径
# ('D:/Hudas/test/pdf/', '')
print(os.path.splitext(r'D:/Hudas/test/pdf/'))
# 分割相对路径
# ('Desktop\\test', '.txt')
print(os.path.splitext(r'Desktop\test.txt'))

# Word文档的路径
word_path = r'C:\Users\X2001565\Desktop\list.docx'
# 分割Word文档的路径
split_path = os.path.splitext(word_path)
# 组合PDF文档的路径
pdf_path = split_path[0] + '.pdf'
print(f'生成的PDF文档路径:{pdf_path}') # 生成的PDF文档路径:C:\Users\X2001565\Desktop\list.pdf

2.11获取文件的大小 

os.path.getsize(path)

getsize()方法用于获取文件的大小 

python中的decimal Python中的os库_Pure_13

例如,获取C:\Users\X2001565\Desktop\Pure supplier LT项目目录下test.py文件的大小,代码如下:

import os
os.path.getsize(r'C:\Users\X2001565\Desktop\Pure supplier LT项目\test.py')