社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

二十七、深入浅出Python中的os模块

Python开发 • 4 年前 • 305 次点击  
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

作者丨小sen

来源丨Python之王


「@Author:Runsen」

当初学Python的时候,把一些标准库和第三方开源库学的七零八落,不成系统,正好趁这个机会来系统的整理一下,先从Python常用的标准库os开始吧。

os

OS模块简单的来说它是一个Python的系统编程的操作模块,可以处理文件和目录这些我们日常手动需要做的 操作。可以查看OS模块的帮助文档。

import os #导入os模块  
help(os)   #查看os模块帮助文档,里面详细的模块相关函数和使用方法

获取当前系统

首先我们需要先导入os模块:直接打印os.name

import os
print(os.name)

#若是Windows则输出'nt',若是Linux/Unix,则是'posix'

获取当前文件的绝对路径

# 获取当前文件的绝对路径 桌面上的demo.py
absolute_file_path = os.path.abspath(__file__)
print(absolute_file_path)

打印结果:C:\Users\YIUYE\Desktop\demo.py

获取当前目录

函数os.getcwd():功能:获取当前目录,python的工作目录。

cwd = os.getcwd()
print(cwd

打印结果:C:\Users\YIUYE\Desktop

判断文件是否存在,返回值为布尔型

import os
file_path = r"C:\Users\YIUYE\Desktop\demo.py"
has_file = os.path.exists(file_path)
print("file path: [{}] is exist: {}".format(file_path, has_file))

file path: [C:\Users\YIUYE\Desktop\demo.py] is exist: True

获取文件的名称

import os
# 获取文件的名称
file_name = os.path.basename(__file__)
print(file_name)

打印结果:demo.py

文件重命名


old_file = r"C:\Users\YIUYE\Desktop\demo.py"
# 或者old_file = "C:/Users/YIUYE/Desktop/demo.py"  前面没有r
new_file = r"C:\Users\YIUYE\Desktop\demo1.py"
# 重命名文件
os.rename(old_file, new_file)

注意点:Unix使用斜杆/ 作为路径分隔符,而web应用最新使用在Unix系统上面,所以目前所有的网络地址都采用 斜杆/作为分隔符。

Windows由于使用 斜杆/ 作为DOS命令提示符的参数标志了,为了不混淆,所以采用 反斜杠\ 作为路径分隔符。所以目前windows系统上的文件浏览器都是用 反斜杠\ 作为路径分隔符。

随着发展,DOS系统已经被淘汰了,命令提示符也用的很少,很多时候斜杆和反斜杠在大多数情况下可以互换,没有影响。

记住:

  • 浏览器地址栏网址使用 斜杆/ ;

  • windows文件浏览器上使用 反斜杠\ ;

  • 出现在html url() 属性中的路径,指定的路径是网络路径,所以必须用 斜杆/ ;

出现在普通字符串中的路径,如果代表的是windows文件路径,则使用 反斜杠\ 需要在前面加r;如果代表的是网络文件路径,则必须使用 斜杆/

具体报错和指示如下图。

如果是Mac没有反斜杠\,和Linux一样都是只有斜杆/

创建文件夹

os.makedirs创建多级目录

# 路径中的多个文件夹都不存在时,可以递归创建,code和code1文件夹本身没有
forders_path = r"C:\Users\YIUYE\Desktop\code\code1"
os.makedirs(forders_path)

os.path.mkdir:只能创建一个文件夹, code文件夹存在,才能创建code1文件夹,如果code文件夹不存在,则会出错。

forder_path = r"C:\Users\YIUYE\Desktop\code\code1"
os.mkdir(forder_path)

获取文件夹下的所有文件名




    
forder_path = r"D:\学习资料"
# 获取文件夹code下的所有文件名,以列表的形式返回
file_names = os.listdir(forder_path)
print(file_names)

获取文件夹下的所有文件夹和文件(无递归遍历)

print(os.scandir(r"D:\学习资料"))

打印结果:

返回的是可迭代对象,我们用for循环迭代一下遍出结果,这里进行判断,寻找文件,而不是文件夹

for f in os.scandir(r"D:\学习资料"):
   if not f.is_file(): #is_file判断是否是文件 not f.is_file表示不是文件
       print('yes',f)
   else:
       print('no:', f)

将path分割成路径名和文件名

os.path.split函数返回一个路径的目录名和文件名

print(os.path.split(r"C:\Users\YIUYE\Desktop\demo.py"))
print(os.path.split(r"C:\Users\YIUYE\Desktop\demo.py")[0])
print(os.path.split(r"C:\Users\YIUYE\Desktop\demo.py")[1])


打印结果:('C:\\Users\\YIUYE\\Desktop''demo.py')
C:\Users\YIUYE\Desktop
demo.py

拼接目录与文件名或目录

os.path.join函数拼接目录与文件名或目录

print(os.path.join('I''am''Runsen'))

打印结果:I\am\Runsen

练习

「创建一个函数,获取文件夹下包含子文件夹的所有文件路径,并且存入list输出?」

最简单的方法使用os.walk

os.walk()用类似于深度遍历的方式遍历文件夹中的子文件夹以及文件。

import os
def get_Listfiles(path):
    Filelist = []
    # os.walk()用类似于深度遍历的方式遍历文件夹中的子文件夹以及文件。
    # 最基本的显示方式为(root_path,[file_dirs],[files]),
    for home, dirs, files in os.walk(path):
        for file in files:
            Filelist.append(os.path.join(home, file))
            #Filelist.append(file)
    return Filelist
print(get_Listfiles(r"D:\Python"))

具体运行结果如下图。


Reference

[1]

传送门~: https://github.com/MaoliRUNsen/runsenlearnpy100


-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/114140
 
305 次点击