Python的常用的模块导入&os路径处理
目录
python的常用的模块导入&os路径处理
一、文件操作
1.打开文件open
2.关于文件写入的方法
3.读取图片和视频等文件【以二进制的形式读取】
4.文件的写入操作
5.文件读取的方法
二、上下文管理器with
1.with的用法:会自动关闭文件
三、模块和包
1.模块和包的定义
2.模块的作用
3.引用不同模块的函数【注意文件名不能有中文】
4.模块导入的几种方式
四、魔法变量
1.__name__:内置类属性
2.__file__:当前文件的路径
五、os模块
1.os模块常用的方法
2.获取项目路径的方法
3.扩展:os方法
4.包里面的 __init__.py 的作用
一、文件操作
1.打开文件open
open的常用参数:
第一个:要读取文件名字或者文件路径
第二个参数:文件打开的模式
- r:只读模式,如果打开的文件不存在,会报错
- rd:只读模式,以二进制的编码格式去打开文件,如果打开的文件不存在,不会报错(会自动创建一个)
- a:追加写入,以写入的模式打开文件,如果打开的文件不存在,不会报错(会自动创建一个)
- ab:追加写入,以写入的模式打开文件,如果打开的文件不存在,不会报错(会自动创建一个),二进制格式编码格式去打开文件
- w:覆盖原文件内容,以写入的模式打开文件,如果打开的文件不存在,不会报错(会自动创建一个)
- wb:覆盖原文件内容,以写入的模式打开文件,如果打开的文件不存在,不会报错(会自动创建一个),二进制格式编码格式去打开文件
- 注意点:a,ab,w,wb只能写入,不能读取内容
第三个参数:
encoding :用来指定打开文件的编码格式(使用rb的时候,不需要加该参数)
2.关于文件写入的方法
- 打开文件open(文件路径,打开文件的模式,文件编码)
- 读取文件内容read()
- 关闭文件close()
#打开文件
# 读取同级目录下的文件,可以直接写文件名
f=open("text.txt","r",encoding="utf8") #在同一个文件夹下
# 读取不在同一个目录下的文件,要写上文件的完整路径
f=open(r"D:\python\python\函数的作用域和内置函数homework.py","r",encoding="utf8")
#读取内容
content=f.read()
# 打印读取出来的内容
print("文件中读取出来的内容:",content)
# 关闭文件
f.close()
3.读取图片和视频等文件【以二进制的形式读取】
f=open(r"C:\Users\11694\Desktop\演示用企业与产品资质图片\材料\经营许可证.jpg","rb")
#读取内容
content=f.read()
# 打印读取出来的内容
print("文件中读取出来的内容:",content)
# 关闭文件
f.close()
4.文件的写入操作
- 以追加的形式写入
f=open("text1.txt","a",encoding="utf8")
f.write("python1")
f.close()
- 以覆盖的形式写入
f=open("text1.txt","w",encoding="utf8")
f.write("python1")
f.close()
例子
#以文件读取的方式去复制一张图片
# 1.打开待复制的文件
f=open(r"C:\Users\11694\Desktop\演示用企业与产品资质图片\材料\经营许可证.jpg","rb")
# 2.读取内容
content=f.read()
# 3.打开复制的新文件
f2=open(r"bj.jpg","ab")
# 4.写入读取出来的内容
f2.write(content)
# 5.关闭两个文件
f.close()
f2.close()
5.文件读取的方法
- read:读取文件中的所有内容,该方法可以通过参数取指定读取内容的大小
- readline:每次读取一行内容
- readlines:按行读取所有的内容,每一行作为一个元素,放到一个列表中
例子
f = open(r"text1.txt", "r", encoding="utf8")
content = f.read(10) # 读取10个字符
print(content)
输出:
python1pyt
content1 = f.readline() # 每次读取 1 行,接着上一次的继续读取
content2 = f.readline()
print(content1)
print(content2)
输出:
hon1python1python1python1python1python1
1111111111111111111111111111
datas=f.readlines()
print(datas) #按行读取所有的内容,每一行作为一个元素,放到一个列表中
输出:
['2222222222222222222222222222222222\n', '333333333333333333333333333333333\n', '444444444444444444444444444444\n', '55555555555555555555555555']
datas=f.readlines()
print(datas[1]) #读取第二行
print(repr(datas[1]))#输出可以看到换行符 \n
输出:
333333333333333333333333333333333
'333333333333333333333333333333333\n'
二、上下文管理器with
1.with的用法:会自动关闭文件
通过with打开文件,会自动带我们关闭文件
with可以开启文件操作的上下文管理器
例子
with open(r"text1.txt", "r", encoding="utf8") as f:
content=f.read()
print(content)
三、模块和包
1.模块和包的定义
模块(Moudle):模块是一个python文件,以 .py 结尾,包含了python对象定义和python语句
包(Package):python中的包就是一个包含__int__.py文件的目录(文件夹)
2.模块的作用
- 模块让你能够有逻辑地组织你的python代码段
- 把相关的功能代码写到一个模块里能让你的代码好用,更易懂
- 模块定义函数,类和变量,模块里也能包含可执行的代码
模块导入的时候,同级目录导入,pycharm有可能识别不了,会对代码进行标红(不代表报错)
在进行模块导入的时候会将导入的模块从上到下执行一遍
3.引用不同模块的函数【注意文件名不能有中文】
- 同级目录可以直接使用import:例子:import register
- 从项目目录下,一级一级往下导入 from learning.pack import register
4.模块导入的几种方式
第一种:导入模板: import 模块名
import 模块名
不能使用import 包名/文件夹
第二种:导入模块中的某个函数或者某个函数的变量:from 模块名 import 变量或函数
from 模块名 import 变量或函数
例子
from learning.pack.login import a,login_func
print(a)
输出:
登录
100
第三种:导入的时候给导入的内容起别名 : as
from 模块 import 变量或函数 as 别名
例子
# 给导入的内容取别名
from learning.pack.login import login_func as lg
lg()
输出:
登录
第四种:几乎不用也不推荐的导入方式【原因:可读性差】 from 模块 import *
from 模块 import * 导入指定模块种所有的变量和函数
from 文件夹.文件夹 import * 导入指定文件夹中所有的模块
例子
from learning.pack.login import *
四、魔法变量
使用场景:再进行模块导入的时候,会将导入的模块从上至下执行一遍,如果有一部分代码再导入的时候不希望执行的应该怎么处理
1.__name__:内置类属性
如果直接运行文件(如果文件作为启动文件),那么文件中的__name__的值为__main__
如果文件(模块)被导入,那么文件中的__name__为模块名
【可参考:https://www.runoob.com/note/39287】
2.__file__:当前文件的路径
代表当前文件的路径
例子
# #这个条件只有在直接运行这个文件的时候才会成立,模块导入的时候改条件不会成立
if __name__=="__main__":
print(a)
login_func()
print(__name__)
五、os模块
1.os模块常用的方法
os.path.dirname(path):获取 给定文件路径,所在目录路径(获取父级目录)
os.path.join():用来进行路径拼接
os.path.abspath:获取绝对路径的方法
os模块拼接出来的路径如果出现/和\都有的情况(不用管,可以使用
例子:
- 获取当前文件路径__file__
- 获取文件所在目录os.path.dirname
- 文件路径拼接os.path.join
- 动态获取路径
import os
#获取当前文件的路径
path=__file__
print("当前文件的路径",path)
# 获取当我文件所在的目录路径
d1_path=os.path.dirname(path)
print(d1_path)
# 路径拼接方法1
print(d1_path+"/case.txt")
# 路径拼接方法2:os模块拼接出来的路径如果出现/和\都有的情况(不用管,可以使用)
file=os.path.join(d1_path,"case.txt")
print(file)
#可以动态获取路径
with open(file,"r",encoding="utf8") as f:
content=f.read()
print(content)
2.获取项目路径的方法
注意:后面项目实战中获取项目绝对路径的方式
Windows系统中的路径使用的是\
linux系统中的路径使用的是/
base_dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
解析
例子:获取项目路径
# 如何获取项目的路径
import os
d1=os.path.dirname(__file__)
print(d1)
d2=os.path.dirname(d1)
print(d2)
base_dir=os.path.dirname(d2)
print(base_dir)
file_path=os.path.join(base_dir,"learning/pack/test01.py")
print(file_path)
with open(file_path,"r",encoding="utf8") as f:
content=f.read()
print(content)
输出:
D:/python/learning/pack
D:/python/learning
D:/python
D:/python\learning/pack/test01.py
例子:
import os
#获取Linux下的路径
print(__file__)
#获取当前操作系统下的绝对路径的表示方法
print(os.path.abspath(__file__))
输出:
D:/python/learning/pack/test01.py
D:\python\learning\pack\test01.py
3.扩展:os方法
扩展:
os.getcwd() 显示当前的工作路径
os.chdir() 切换工作路径
os.mkdir() 在某个目录下创建一个新目录
os.rmdir() 删除一个目录
os.listdir() 获取当前路径下的目录列表,返回列表格式数据
os.path.isdir() 判断当前文件是否是目录,返回布尔值
os.path.isfile() 判断当前文件是否是文件,返回布尔值
例子
import os
res=os.path.isfile(r"D:\python\learning")
print(res)
输出:
False
# 获取当前工作路径,等同于linux下的pwd
p1=os.getcwd()
print(p1)
输出:
D:\python\learning\pack
# 切换路径:cd
os.chdir("..")
print(os.getcwd())
输出:
D:\python\learning
# 创建文件夹
os.mkdir("test02")
# 删除文件夹
os.rmdir("D:\python\learning\pack\test02")
# 获取当前目录下的文件及文件夹的信息:listdir【等同于linux命令ls】
# 默认获取当前工作目录。可以接受一个参数
print(os.listdir(r"D:\python\learning"))
输出:['bj.jpg', 'pack', 'test02', 'text1.txt', '__init__.py', '__pycache__', '操作文件.py']
4.包里面的 __init__.py 的作用
- __init__.py的第一个作用就是package的标识,如果没有该文件,该目录就不会认为是package。
- 定义__all__用来模糊导入
- 编写Python代码(不建议在__init__中写python模块,可以在包中在创建另外的模块来写,尽量保证__init__.py简单)