python根须系统斜杠_深入浅出Python中的os模块

6ea5e99e175dce6ceec36b7ea66a8d05.png

「@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;如果代表的是网络文件路径,则必须使用 斜杆/

具体报错和指示如下图。

0e02111d9e23b4bb88acf9958fa22255.png
633694a4dd2de2b3910ce17ded0ffd4c.png

如果是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判断是否是文件
       print('yes',f)
   else:
       print('no:', f)
03ecf5d6f397f925c40399282e6e1fa5.png

将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"))

具体运行结果如下图。

398fa05b27a3b014223e5df7bef6a26a.png

扫描二维码

获取更多精彩

f7a3048f15006c0e7f463667ca0a7d79.png

往期推荐

Python仅用3行代码就能输出花式字符串图集,同事直呼666!

Python读写yaml排版混乱还丢失注释?我来告诉你解决办法!

关于Python的前后、单双下划线作用,看完这篇文章,吊打面试官!

惊爆:当Python代码遇到zip解压炸弹,未做防护的你后悔莫及!

Pycharm IDEA破解 汉化 插件 带你一文打尽!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

密码学专题 随机数文件

无论使用OpenSSL的指令还是其API,随机数文件都是会经常碰到的一个概念。大部分密码算法的安全性都跟随机数的好坏相关,所以一个成功的密码学应用软件,对随机数的处理是不能随便的。OpenSSL虽然没有提供很完美的随机数生成程序,但是…

Java web后端7JSTL

概括 下载jstl的jar包 官网&#xff1a;https://mvnrepository.com/ 网址1&#xff1a;https://search.maven.org/ 在pomxml中插入依赖&#xff1a; <dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1…

python输入程序_python程序的输入输出(acm的几个小程序)

#!/usr/bin/env python#codingutf-8 a[]for x inraw_input().split(): a.append(int(x))print sum(a) 下面的代码只有一行&#xff0c;&#xff0c;可惜不是我想出来的&#xff01;&#xff01;&#xff01;&#xff01;&#xff1a; print sum(int(x) for x in raw_input().sp…

密码学专题 口令输入的方式

虽然口令的安全性很值得担忧&#xff0c;但是口令在OpenSSL中是经常使用的&#xff0c;这是没有办法替代的一种简易的保护数据的方法。OpenSSL中使用口令的地方很多&#xff0c;比如密钥的加密和解密&#xff0c;等等。OpenSSL的指令提供了多种灵活的口令输入方法&#xff0c;但…

Python学习14 模块和包

模块 公共类、函数都可以放在独立的文件中&#xff0c;这样其他多个程序都可以使用&#xff0c;而不必把这些公共性的类、函数等在每个程序中复制一份&#xff0c;这样独立的文件就叫做模块&#xff0c;它们的扩展名为.py 标准库中的模块 使用help查看模块 代码&#xff1a; …

python语句分为_python以什么划分语句块

语句块是在条件为真&#xff08;条件语句&#xff09;时执行或者执行多次&#xff08;循环语句&#xff09;的一组语句&#xff1b;在代码前放置空格来缩进语句即可创建语句块&#xff0c;语句块中的每行必须是同样的缩进量&#xff1b;&#xff08;推荐学习&#xff1a;Python…

Python学习15 正则表达式1

网址 正则表达式测试网址&#xff1a;https://regex101.com/ 概述 正则表达式&#xff1a; 正则表达式(Regular Expression)是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字符&#xff08;称为"元字符"…

STL源码剖析 空间配置器 查漏补缺

ptrdiff_t含义 减去两个指针的结果的带符号整数类型ptrdiff_t (Type support) - C 中文开发手册 - 开发者手册 - 云社区 - 腾讯云 std::set_new_handler&#xff08;&#xff09;函数的理解 关于set_new_handler的理解_wck0617-CSDN博客new分配内存的时候 如果分配的空间不…

python每天定时9点执行_python定时器每天订时执行的实例方法

python定时器,实现每天凌晨3点执行的方法 如下所示&#xff1a;Created on 2018-4-20 例子:每天凌晨3点执行func方法import datetime import threading def func(): print("haha") #如果需要循环调用&#xff0c;就要添加以下方法 timer threading.Timer(86400, fun…

Python学习16 正则表达式2 re模块

re 模块 re 模块&#xff1a; Python的 re 模块实现了正则表达式处理的功能。 导入re模块后&#xff0c;使用findall、search函数可以进行匹配 查找&#xff1a;match和search 多个匹配上的&#xff0c;也只会返回第一个匹配上的 re.match()&#xff1a; 需要特别注意的是&…

STL源码剖析 内存基本处理工具 初始化空间的五个函数

初始化空间的五个函数构造函数 construct()析构函数 destroy()剩余三个底层函数 和 高层函数之间的对应关系如下uninitialized_copy() 对应 copy()uninitialized_fill() 对应 fill()uninitialized_fill_n() 对应 fill_n()使用<memory>使用上述三个底层函数 uninitiali…

单基因gsea_筛到5分的核心基因以后你可以怎么做?

这一次我们从一些已经发表的文章拆解&#xff0c;我们来看看&#xff0c;你找到了一个核心基因以后&#xff0c;你可以怎么做呢&#xff1f;我们就不说那么多废话了&#xff0c;直接用几篇文章的解读来带着大家领会一下如何去进行下一步的分析。Case1&#xff1a;预后标志物免疫…

安卓 原生okhttp使用get与post获取网络数据

网址 https://square.github.io/okhttp/ 配置 依赖 在module的build.gradle中&#xff1a; implementation com.squareup.okhttp3:okhttp:3.14.7implementation com.squareup.okio:okio:1.17.5AndroidManifest.xml <uses-permission android:name"android.permissi…

STL源码剖析 迭代器的概念和traits编程技法

迭代器&#xff1a;依序巡防某个聚合物(容器)所含的各个元素&#xff0c;但是不需要暴露这个聚合物的内部表述方式核心思想&#xff1a;将容器和算法分开&#xff0c;彼此独立设计容器和算法的泛型化&#xff0c;均可以使用模板&#xff0c;使用迭代器连接容器和算法例子 templ…

.sql文件如何执行_干货|一条SQL查询语句是如何执行的

作者&#xff1a;wanber链接&#xff1a;https://blog.nowcoder.net/n/9e120e8f1314466bb44fe706b283dc20

STL源码剖析 5中迭代器型别

最常使用的5种迭代器的型别 为 value_type、difference_type、pointer、reference、iterator_category。如果想要自己开发的容器和STL进行适配&#xff0c;就需要定义上述5种类型 iteraor_traits 必须针对传入的型别为 pointer 或者 pointer-to-const设计偏特化版本 template &…

Python学习16 正则表达式3 练习题

用户名匹配 1.用户名匹配&#xff1a;由数字、大小写字母、下划线_、中横线-组成&#xff0c;长度为6-12位&#xff0c;不能以数字开头。 import re usernameab578_-SDF resultre.search(^[a-zA-Z_-][0-9a-zA-Z_-]{5,12}$,username) print(result)邮箱 2.验证输入的邮箱&…

加载tf模型 正确率很低_深度学习模型训练全流程!

↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习&#xff0c;不错过Datawhale干货 作者&#xff1a;黄星源、奉现&#xff0c;Datawhale优秀学习者本文从构建数据验证集、模型训练、模型加载和模型调参四个部分对深度学习中模型训练的全流程进行讲解。一个成…

Python学习17 Turtle库绘图

学习网址&#xff1a;https://docs.python.org/zh-cn/3/library/turtle.html Turtle库 Turtle库是Python语言中一个很流行的绘制图像的函数库&#xff0c;一个小乌龟&#xff0c;在一个横轴为x、纵轴为y的坐标系原点&#xff08;画布中心&#xff09;&#xff0c;(0,0)位置开…

android ros 节点编写_嵌入式的我们为什么要学ROS

前言本来是要写一篇STM32移植ROS的一个小lib库&#xff0c;ROS一般都是需要跑在Linux上的&#xff0c;STM32使用就是当成一个ROS通讯的小节点&#xff0c;但是写文章时间不够&#xff0c;所以就简单做一篇ROS的介绍文章&#xff0c;分享给嵌入式的小伙伴们。ROS现在在机器人领域…