22.Python 操作目录

目录)

1. 认识路径

目录也称文件夹,用于分层保护文件,通过目录可以分门别类地存放文件,也可以通过目录快速地找到想要的文件,在Python中并没有提供直接操作目录的函数或者对象,而是需要使用内置的osos.path模块实现。

用于定位一个文件或者目录的字符串被称为一个路径,在程序开发的时候,通常会涉及两种路径:一种是相对路径,另一种是绝对路径。

相对路径

当前工作目录是指当前文件所在的目录。可以通过os模块提供的getcwd()函数获取当前工作目录。

python 复制代码
import os
print(os.getcwd()) # 输出当前工作目录

相对路径就是依赖当前的工作目录,如果在当前工作目录下有一个名称为message.txt的文件,那么在打开这个文件时,就可以直接写上文件名,这时采用的就是相对路径。

在路径中,注意下面3个特殊符号的语义:
/:表示根目录,在Windows系统下表示某个盘的根目录,如'E:'。
.:表示当前目录,也可以写成'./'。在当前目录中可以直接写文件名或者下级目录。
..:表示上级目录,也可以写成'.../'。

分别使用'/'、'./'和'.../'打开文本文件,然后执行写入操作。

python 复制代码
f = open('test1.txt','w')
f.write('当前目录')
f.close()
f = open('/test2.txt','w')
f.write('根目录')
f.close()
f = open('./test3.txt','w')
f.write('当前目录1')
f.close()
f = open('../test4.txt','w')
f.write('上级目录')
f.close()

绝对路径

绝对路径是指在使用文件时指定文件的实际路径,他不依赖于当前工作目录,可以通过os.path模块提供的abspath()函数获取一个文件的绝对路径。

python 复制代码
'''
os.path.abspath(path)
path 为要获取绝对路径的相对路径,可以是文件,也可以是目录。
'''
import os
path1 = os.path.abspath('.') # 获取当前所处的文件夹绝对路径
print(path1) # /Users/guanfawang/Python_Language/file_operations
path2 = os.path.abspath('..') # 表示当前文件夹的上一级文件夹的绝对路径
print(path2) # /Users/guanfawang/Python_Language

''字符具有转义功能,可以使用'\'替换,也可以使用'/'代替''。更简单的方法是在字符串前面加R或r前缀。

2. 拼接路径

当把多个路径拼接为一个路径时,不建议直接使用字符串拼接。因为在Linux、Unix系统下,路径分隔符是斜杆'/';在Windows系统下,路径分隔符是反斜杠'',也可以兼容'/';在Mac OS系统中,路径分隔符是冒号'/'。

一般使用os.path子模块提供的join()函数把多个路径拼接为一个路径。

  • 除第一个参数外,如果参数的首字母不是斜杆字符,则会被加上分隔符斜杆的前缀。
  • 如果所有参数没有一个是绝对路径,那么拼接的路径将是一个相对路径。
  • 如果有一个参数是绝对路径,则在它之前的所有参数均被舍弃,拼接的路径是一个绝对路径。
  • 如果有多个参数是绝对路径 ,则以参数列表中最后一个出现的绝对路径参数为基础,在它之前的所有参数均被舍弃,拼接的路径是一个绝对路径。
  • 如果最后一个参数为空字符串 ,则生成的路径将以'/'斜杆作为路径的后缀,表示拼接的路径是一个目录
python 复制代码
'''
os.path.join(path1[,path,...])
'''
import os
path1 = 'home'
path2 = 'develop'
path3 = 'code'
path4 = ''
path5 = os.path.join(path1,path2,path3)
print(path5) # home/develop/code
path6 = os.path.join(path1,path2,path4)
print(path6) # home/develop/

3.检测目录

判断给定的目录是否存在,可以使用os.path模块的exists()函数实现。

python 复制代码
'''
os.path.exists(path)
'''
import os
b = os.path.exists('test') # 判断当前目录下是否存在test文件夹
print(b) # False

exists()函数不区分路径是目录还是文件,如果要区分指定路径是目录、文件、链接,或者为绝对路径,可以使用下面的专用函数。
os.path.isabs(path):检测指定路径是否为绝对路径。
os.path.isdir(path):检测指定路径是否为目录。
os.path.isfile(path):检测指定路径是否为文件。
os.path.isline(path):检测指定路径是否为链接。

python 复制代码
# 快速统计指定文件目录下所有文件类型的个数
import os
def count_filetype(file_path):
    file_dict={}
    file_list=os.listdir(file_path)
    for file in file_list:
        pathname = os.path.join(file_path,file)
        if os.path.isfile(pathname):
            (file_name,file_extention) = os.path.splitext(file)
            if file_dict.get(file_extention) == None:
                count = 0
            else:
                count = file_dict.get(file_extention)
        count += 1
        file_dict.update({file_extention:count})
    for key,count in file_dict.items():
        print('\"%s\"文件夹下类型为\"%s\"的文件共有\"%s\"个'%(file_path,key,count))
count_filetype(r'/Users/guanfawang/Python_Language') # 打印信息
'''
"/Users/guanfawang/Python_Language"文件夹下类型为".md"的文件共有"1"个
'''

4.创建和删除目录

os模块提供了两个创建目录的函数:一个是创建一级目录(单个目录),另一个用于创建多级目录(多个目录)。

  • os.mkdir(path,mode=0777):创建单个目录。
  • os.rmdir(path):删除单个目录。
  • os.makedirs(path,mode=0777):创建多级目录。
  • os.removerdirs(path):删除多级目录。
python 复制代码
import os
path1 = 'test' # 定义单级目录
if not os.path.exists(path1):
    os.mkdir(path1) # 创建一级目录
if os.path.exists(path1):
    os.rmdir(path1) # 删除一级目录
path2 = 'test/sub_test' # 定义多级目录
if not os.path.exists(path2):
    os.makedirs(path2) # 创建多级目录
if os.path.exists(path2):
    os.removedirs(path2) # 删除多级目录

rmdir()removedirs()函数只能删除空目录。如果要删除非空目录,可以使用shutil模块的rmtree(path)函数实现。

python 复制代码
import shutil
shutil.rmtree('test')

5.遍历目录

遍历就是对指目录下的全部目录(包括子目录)及文件运行一遍。

os模块提供了walk()函数,可用于目录的遍历;

python 复制代码
'''
os.walk(top,topdown=True,οnerrοr=None,followlines=False)
'''
import os
def visitDir(path): 
    for root,dirs,files in os.walk(path): # 遍历目录
        for filepath in files: # 遍历文件
            print(os.path.join(root,filepath)) # 输出文件的完整路径
visitDir('/Users/guanfawang/Python_Language/file_operations') 
相关推荐
海阔天空_201320 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
零意@28 分钟前
ubuntu切换不同版本的python
windows·python·ubuntu
思忖小下39 分钟前
Python基础学习_01
python
q567315231 小时前
在 Bash 中获取 Python 模块变量列
开发语言·python·bash
是萝卜干呀1 小时前
Backend - Python 爬取网页数据并保存在Excel文件中
python·excel·table·xlwt·爬取网页数据
代码欢乐豆1 小时前
数据采集之selenium模拟登录
python·selenium·测试工具
狂奔solar2 小时前
yelp数据集上识别潜在的热门商家
开发语言·python
Tassel_YUE2 小时前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化
聪明的墨菲特i2 小时前
Python爬虫学习
爬虫·python·学习
努力的家伙是不讨厌的3 小时前
解析json导出csv或者直接入库
开发语言·python·json